本文集鏈接:http://www.reibang.com/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ì)話中訪問(wèn)傳入的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è)類是專門(mén)用來(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雨席,沒(méi)有則返回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 # 切換到最新打開(kāi)的窗口中 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)")