天天看點

pythonweb自動化軟體_Selenium(Web自動化工具)

1. 先下載下傳相應的浏覽器driver, 并配置環境變量

2. 下載下傳python selenium包  pip install selenium

pycharm 中ctrl+alt+l   對文檔内容進行格式化

直接等待  time.sleep(3)

隐式等待  self.driver.implicitly_wait(3)  動态的等待

顯示等待  WebDriverWait  配合until()

find_element(By.ID, '#kw').send_keys('霍格沃茲')

find_element(By.ID, '#su').click()

xpath

css selector

Base封裝

from selenium import webdriver

class Base:

def setup(self):

self.driver = webdriver.Firefox()

self.driver.implicitly_wait(5)

self.driver.maximize_window()

def teardown(self):

self.driver.quit()

百度浏覽器測試

from selenium import webdriver

class TestHogWords:

def setup(self):

self.driver = webdriver.Firefox() # 擷取浏覽器

self.driver.maximize_window() # 視窗最大化

self.driver.implicitly_wait(20) # 隐式動态等待時間

def teardown(self):

self.driver.quit() # driver回收

def test_demo(self):

self.driver.get("https://www.baidu.com")

self.driver.find_element_by_link_text("新聞").click()

self.driver.find_element_by_link_text("國内").click()

視窗切換

from time import sleep

from selenium.webdriver.common.by import By

from selenium_learning.base import Base

class TestWindows(Base):

def test_windows(self):

self.driver.get("https://www.baidu.com")

self.driver.find_element(By.CSS_SELECTOR, '.s-top-login-btn').click()

self.driver.find_element(By.LINK_TEXT, "立即注冊").click()

sleep(3) # 需要一定的延遲

windows = self.driver.window_handles

print(windows)

# print(self.driver.current_window_handle)

# print(windows)

self.driver.switch_to.window(windows[-1])

print(self.driver.current_window_handle)

self.driver.find_element(By.CSS_SELECTOR, '#TANGRAM__PSP_4__userName').send_keys('alex')

self.driver.find_element(By.CSS_SELECTOR, '#TANGRAM__PSP_4__phone').send_keys('15250280726')

self.driver.switch_to.window(windows[0])

self.driver.find_element(By.CSS_SELECTOR, '#TANGRAM__PSP_10__footerULoginBtn').click()

sleep(3)

左擊, 右擊,輕按兩下,拖拽操作

from time import sleep

import pytest

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.common.by import By

class TestActionChains:

def setup(self):

self.driver = webdriver.Firefox()

def teardown(self):

self.driver.quit()

@pytest.mark.skip

def test_action(self):

self.driver.get("http://sahitest.com/demo/clicks.htm")

element_click = self.driver.find_element(By.XPATH, '//input[@value="click me"]')

element_right_click = self.driver.find_element(By.XPATH, '//input[@value="right click me"]')

element_double_click = self.driver.find_element(By.XPATH, '//input[@value="dbl click me"]')

action = ActionChains(self.driver)

action.click(element_click)

action.context_click(element_right_click)

action.double_click(element_double_click)

action.perform()

sleep(3)

@pytest.mark.skip

def test_move_to_element(self):

self.driver.get("https://www.baidu.com")

element_one = self.driver.find_element(By.CSS_SELECTOR, '#s-usersetting-top')

action = ActionChains(self.driver)

action.move_to_element(element_one)

action.perform()

sleep(3)

def test_dragdrop(self):

self.driver.get("http://sahitest.com/demo//dragDropMooTools.htm")

drag_element = self.driver.find_element(By.CSS_SELECTOR, '#dragger')

drop_element = self.driver.find_element(By.CSS_SELECTOR, 'div.item:nth-child(4)')

action = ActionChains(self.driver)

action.drag_and_drop(drag_element,drop_element)

#action.click_and_hold(drag_element).release(drop_element).perform()

action.perform()

sleep(3)

frame切換和alert彈窗處理

from time import sleep

from selenium.webdriver import ActionChains

from selenium.webdriver.common.by import By

from selenium_learning.base import Base

class TestAlert(Base):

def test_alert(self):

self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")

self.driver.switch_to_frame("iframeResult") #切換至iframeReslut視窗

drag = self.driver.find_element(By.CSS_SELECTOR, '#draggable')

drop = self.driver.find_element(By.CSS_SELECTOR, '#droppable')

action = ActionChains(self.driver)

action.drag_and_drop(drag, drop).perform()

sleep(3)

self.driver.switch_to_alert().accept()

sleep(3)

self.driver.switch_to_default_content() #回歸預設視窗

sleep(3)

頁面滑動操作

from time import sleep

from selenium import webdriver

from selenium.webdriver import TouchActions

from selenium.webdriver.common.by import By

class TestTouchAction:

def setup(self):

option = webdriver.ChromeOptions()

option.add_experimental_option('w3c', False)

self.driver = webdriver.Chrome(options=option)

self.driver.implicitly_wait(5)

def teardown(self):

self.driver.quit()

def test_demo(self):

self.driver.get("https://www.baidu.com")

element_input = self.driver.find_element(By.CSS_SELECTOR, '#kw')

element_search = self.driver.find_element(By.CSS_SELECTOR, '#su')

element_input.send_keys('selenium測試')

action = TouchActions(self.driver)

action.tap(element_search) # 點選

action.perform()

action.scroll_from_element(element_input, 0, 10000).perform() # 滑動操作

sleep(3)

from time import sleep

import pytest

from selenium.webdriver.common.by import By

from selenium_learning.base import Base

class TestDemo(Base):

@pytest.mark.skip

def test_demo(self):

self.driver.get("https://www.baidu.com")

self.driver.find_element(By.CSS_SELECTOR, '#kw').send_keys("selenium測試")

self.driver.find_element(By.CSS_SELECTOR, '#su').click()

self.driver.execute_script("document.documentElement.scrollTop=10000")

sleep(5)

self.driver.find_element(By.CSS_SELECTOR, '.n').click()

sleep(2)

def test_12306(self):

self.driver.get("https://www.12306.cn/index/")

self.driver.execute_script("document.getElementById('train_date').removeAttribute('readonly')")

sleep(3)

self.driver.execute_script("document.getElementById('train_date').value='2020-5-20'")

sleep(5)

利用cookies進行企業微信web自動化登入

import shelve

from time import sleep

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.common.by import By

class TestCookie:

def setup(self):

options = Options()

options.debugger_address = "127.0.0.1:8081"

# self.driver = webdriver.Firefox(options=options)

self.driver = webdriver.Firefox()

self.driver.implicitly_wait(5)

self.driver.maximize_window()

def teardown(self):

self.driver.quit()

def test_cookie(self):

self.driver.get("https://work.weixin.qq.com/wework_admin/frame")

db = shelve.open("test_db")

# db['cookie'] = self.driver.get_cookies() #擷取網頁cookies(),儲存在test_db中

cookies = db['cookie']

for cookie in cookies:

if 'expiry' in cookie.keys():

cookie.pop('expiry')

self.driver.add_cookie(cookie)

self.driver.get('https://work.weixin.qq.com/wework_admin/frame')

self.driver.find_element(By.CSS_SELECTOR, '#menu_contacts > span').click()

sleep(3)

db.close()