selenium-經常使用webdriver API

WebDriver的原理:javascript

webdriver是按照server-client的經典設計模式設計的。css

server端就是remote server,能夠是任意的瀏覽器。當咱們的腳本啓動瀏覽器後,該瀏覽器就是remote server,它的職責就是等待client發送請求並做出響應。java

client就是咱們的測試代碼。咱們測試代碼的一些行爲,例如打開瀏覽器,跳轉到特定的url等操做是以http請求的方式發送給被測試瀏覽器的,也就是remote server。remote server接受請求,執行相應操做,並在response中返回執行狀態、返回值等信息。web

webdriver的工做流程:chrome

a.webdriver啓動目標瀏覽器,並綁定到指定端口。啓動的瀏覽器實例將做爲webdriver的Remote server,windows

b.client端經過CommandExcuter發送HttpRequest給remote server的偵聽端口設計模式

c.remote server須要依賴原生的瀏覽器組件(如chromedriver.exe)來轉化瀏覽器的native調用瀏覽器

一 元素定位cookie

二 常見使用ide

1.操做瀏覽器

from selenium import webdriver

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
dr.close()
打開瀏覽器並全屏顯示
from selenium import webdriver


driver = webdriver.Chrome("D:/soft/chromedriver.exe")
first_url = 'https://www.baidu.com/'
print("now access %s"%first_url)
driver.get(first_url)

second_url = 'http://news.baidu.com/'
print("now access %s"%second_url)
driver.get(second_url)

print("back to %s"%first_url)
driver.back()

print("forward to %s"%second_url)
driver.forward()

driver.quit()
控制瀏覽器前進後退
from selenium import webdriver

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
dr.refresh()  # 模擬瀏覽器刷新
dr.quit()
模擬瀏覽器刷新

2.簡單元素操做

from selenium import webdriver

driver = webdriver.Chrome("D:/soft/chromedriver.exe")
driver.get("http://126.com/")
driver.maximize_window()
driver.find_element_by_css_selector('.u-login-entry').click()
driver.switch_to.frame(0)
driver.find_element_by_css_selector('.j-nameforslide').send_keys('wmm_0165')  # 模擬鍵盤像輸入框輸入內容
driver.find_element_by_css_selector('input[name=email]').clear()  # 清楚文本輸入得內容
driver.quit()
clear與send_keys
from selenium import webdriver

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')

size = dr.find_element_by_css_selector('input[name=wd]').size  # 獲取輸入框的尺寸
print(size)
text = dr.find_element_by_css_selector('p:nth-of-type(5)>a').text
print(text)
type = dr.find_element_by_css_selector('input[id=su]').get_attribute('type')  # 獲取元素的屬性值
print(type)
result = dr.find_element_by_css_selector('input[id=su]').is_displayed()  # 元素結果是否可見,返回False或True
print(result)


輸出結果:
{'height': 22, 'width': 526}
使用百度前必讀
submit
True
webElement的常見用法

3.鼠標事件

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
shurukuang = dr.find_element_by_css_selector('input[name=wd]')
ActionChains(dr).context_click(shurukuang).perform()  # 鼠標右擊
ActionChains(dr).move_to_element(shurukuang).perform()  # 鼠標懸停
ActionChains(dr).double_click(shurukuang).perform()  # 鼠標雙擊
# ActionChains(dr).drag_and_drop(source,target).perform()  # 鼠標拖放
鼠標操做

4.鍵盤事件

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')

dr.find_element_by_css_selector('input[name=wd]').send_keys('seleniumm')  # 輸入框輸入內容
dr.find_element_by_css_selector('input[name=wd]').send_keys(Keys.BACK_SPACE)  # 刪除多輸入的一個m

time.sleep(2)
dr.find_element_by_id('su').send_keys(Keys.ENTER)  # 經過回車鍵來代替單擊操做

dr.quit()
模擬鍵盤事件

5.得到驗證信息

from selenium import webdriver
dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
print(dr.title)  # 獲取當前頁面標題
print(dr.current_url)  # 獲取當前頁面url
dr.quit()

輸出結果:
百度一下,你就知道
https://www.baidu.com/
得到驗證信息

6.設置元素等待

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
element = WebDriverWait(dr, 5, 0.5).until(EC.presence_of_element_located(("css selector", 'input[name=wd]')))  # ignored_exceptions 超時後的異常信息
dr.quit()
顯示等待

7.定位一組元素

8.多表單切換

"""
webdriver只能在一個頁面上對元素識別與定位,對於frame/iframe表單內嵌頁面上的元素沒法直接定位。
這時就須要經過switch_to.frame()方法將當前定位的主體切換爲frame/iframe表單的內嵌頁面中
"""
from selenium import webdriver

driver = webdriver.Chrome("D:/soft/chromedriver.exe")
driver.get("http://126.com/")
driver.maximize_window()
driver.find_element_by_css_selector('.u-login-entry').click()
dingwei = driver.find_element_by_css_selector('div#loginDiv>iframe')
driver.switch_to.frame(dingwei)  # switch_to.frame()默承認以直接獲取表單的id或name屬性。若是沒有可用給的id和name屬性,咱們能夠自行定位,再將定位對象傳遞給switch_to.frame()方法
# driver.switch_to.frame(0)
driver.find_element_by_css_selector('.j-nameforslide').send_keys('wmm_0165')  # 模擬鍵盤像輸入框輸入內容
driver.find_element_by_css_selector('input[name=email]').clear()  # 清楚文本輸入得內容
driver.quit()
多表單切換

9.多窗口切換

"""
在頁面操做過程當中有時候點擊某個連接會彈出新的窗口,這時就須要主機切換到新打開的窗口上進行操做
"""
from selenium import webdriver
import time

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
search_windows = dr.current_window_handle  # 獲取當前窗口句柄
dr.find_element_by_css_selector('div#u1>a[name=tj_login]').click()  # 點擊登陸
time.sleep(2)
dr.find_element_by_css_selector('.tang-pass-footerBarPhoenix+a').click()  # 點擊當即註冊

all_handles = dr.window_handles  # 獲取當前全部打開的窗口的句柄

# 進入註冊窗口
for handle in all_handles:
    if handle != search_windows:
        dr.switch_to.window(handle)  # 切換到相應的窗口
        print('now register window!')
        time.sleep(2)

# 回到搜索窗口
for handle in all_handles:
    if handle == search_windows:
        dr.switch_to.window(handle)
        print('now search window!')
        time.sleep(2)

dr.quit()


輸出結果:
now register window!
now search window!
多窗口切換

10.警告框處理

11.上傳文件

12.下載文件

13.操做cookie

14.調用javascript

15.關閉窗口

driver.quit():退出相關的驅動程序和關閉全部窗口

driver.close():關閉當前窗口

相關文章
相關標籤/搜索