本文集鏈接:http://www.itdecent.cn/nb/25338984
1. 簡(jiǎn)介
selenium.webdriver.remote.webdriver.WebDriver 這個(gè)類其實(shí)是所有其他Webdriver的父類,例如Chrome Webdriver,Firefox Webdriver都是繼承自這個(gè)類。這個(gè)類中實(shí)現(xiàn)了每個(gè)Webdriver間相通的方法。
2. 常用方法與屬性
-
get(url)在當(dāng)前瀏覽器會(huì)話中訪問傳入的url地址。
用法:
driver.get('https://www.baidu.com') -
close()關(guān)閉瀏覽器當(dāng)前窗口。
-
quit()退出webdriver并關(guān)閉所有窗口。
-
refresh()刷新當(dāng)前頁(yè)面。
-
title獲取當(dāng)前頁(yè)的標(biāo)題。
-
page_source獲取當(dāng)前頁(yè)渲染后的源代碼。
-
current_url獲取當(dāng)前頁(yè)面的url。
-
window_handles獲取當(dāng)前會(huì)話中所有窗口的句柄,返回的是一個(gè)列表。
3. 查找元素
Webdriver對(duì)象中內(nèi)置了查找節(jié)點(diǎn)元素的方法,使用非常方便。
3.1. 單個(gè)查找
以下是查找單個(gè)元素的方法:
| 方法 | 作用 |
|---|---|
find_element_by_xpath() |
通過(guò)Xpath查找 |
find_element_by_class_name() |
通過(guò)class屬性查找 |
find_element_by_css_selector() |
通過(guò)css選擇器查找 |
find_element_by_id() |
通過(guò)id查找 |
find_element_by_link_text() |
通過(guò)鏈接文本查找 |
find_element_by_name() |
通過(guò)name屬性進(jìn)行查找 |
find_element_by_partial_link_text() |
通過(guò)鏈接文本的部分匹配查找 |
find_element_by_tag_name() |
通過(guò)標(biāo)簽名查找 |
查找后返回的是一個(gè)Webelement對(duì)象。
3.2. 多個(gè)查找
上面的方法都是將第一個(gè)找到的元素進(jìn)行返回,而將所有匹配的元素進(jìn)行返回使用的是find_elements_by_*方法。
此方法返回的是一個(gè)Webelement對(duì)象組成的列表。注:將其中的element加上一個(gè)s,則是對(duì)應(yīng)的多個(gè)查找方法。
3.3. 私有方法
除了以上的多種查找方式,還有兩種私有方法find_element()和find_elements()可以使用:
例子:
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
By這個(gè)類是專門用來(lái)查找元素時(shí)傳入的參數(shù),這個(gè)類中有以下屬性:
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
4. 操作Cookie
-
add_cookie(cookie_dict)給當(dāng)前會(huì)話添加一個(gè)cookie。
cookie_dict: 一個(gè)字典對(duì)象,必須要有"name"和"value"兩個(gè)鍵,可選的鍵有:“path”, “domain”, “secure”, “expiry” 。
-
用法:
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})
-
get_cookie(name)按name獲取單個(gè)Cookie,沒有則返回None。
-
get_cookies()獲取所有Cookie,返回的是一組字典。
-
delete_all_cookies()?刪除所有Cookies。
-
delete_cookie(name)按name刪除指定cookie。
5. 獲取截屏
-
get_screenshot_as_base64()獲取當(dāng)前窗口的截圖保存為一個(gè)base64編碼的字符串。
-
get_screenshot_as_file(filename)獲取當(dāng)前窗口的截圖保存為一個(gè)png格式的圖片,filename參數(shù)為圖片的保存地址,最后應(yīng)該以.png結(jié)尾。如果出現(xiàn)IO錯(cuò)誤,則返回False。
用法:
driver.get_screenshot_as_file(‘/Screenshots/foo.png’) -
get_screenshot_as_png()獲取當(dāng)前窗口的截圖保存為一個(gè)png格式的二進(jìn)制字符串。
6. 獲取窗口信息
-
get_window_position(windowHandle='current')獲取當(dāng)前窗口的x,y坐標(biāo)。
-
get_window_rect()獲取當(dāng)前窗口的x,y坐標(biāo)和當(dāng)前窗口的高度和寬度。
In [1]: driver.get_window_rect() Out[1]: {'height': 600, 'width': 800, 'x': 0, 'y': 200} -
get_window_size(windowHandle='current')獲取當(dāng)前窗口的高度和寬度。
7. 切換框架或窗口
-
switch_to.frame(frame_reference)在頁(yè)面中,如果有iframe這樣的頁(yè)面子框架的話,selenium是無(wú)法搜索到子框架
frame中的元素,并與之定位的。所以如果要操作
frame中的元素,則首先要切換到這個(gè)frame中。首先我們需要使用上面提供的搜索方法
find_element_by_*等來(lái)找到frame框架,然后傳入到切換的方法中。frame = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(frame)還有一個(gè)方法可以切換回主界面:
driver.switch_to.default_content() -
switch_to.window(window_name)這個(gè)方法可以讓我們?cè)谝粋€(gè)瀏覽器中的窗口中互相切換,這個(gè)方法中需要傳入目標(biāo)窗口的句柄,窗口句柄可以通過(guò)
driver.window_handles等方法來(lái)進(jìn)行獲取。windows = driver.window_handles # 切換到最新打開的窗口中 switch_to.window(windows[-1])
8. 執(zhí)行JS代碼
-
execute_async_script(script, *args)在當(dāng)前的window/frame中
異步執(zhí)行JS代碼。script:要執(zhí)行的JS代碼。
*args:JS代碼執(zhí)行要傳入的參數(shù)。
-
execute_script(script, *args)在當(dāng)前的window/frame中
同步執(zhí)行JS代碼。script:要執(zhí)行的JS代碼。
*args:JS代碼執(zhí)行要傳入的參數(shù)。
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")