Selenium 體系中用來操作瀏覽器的 API 就是 WebDriver,WebDriver 針對多種語言都實現了一套 API,支持多種編程語言。
Selenium 通常用來做自動化測試,或者編寫網絡爬蟲。
通常我們說的 Selenium 自動化操作,指的就是 WebDriver 中提供的控制方法。一般我們講 Selenium 多半都是在談 WebDriver。
Webdirver 中提供了對瀏覽器、網頁元素、鼠標鍵盤等操作方法:
- 瀏覽器操作: 打開和關閉瀏覽器、改變瀏覽器分辨率,切換窗口,模擬刷新等
- 頁面元素定位: WebDriver 中提供了 Id、Name、Link text、Css、Xpath 等定位方式,用於查找需要操作的網頁元素
- 頁面元素操作: 找到元素都,就可以對元素進行操作。比如點擊
click
、輸入send_keys
、清空文本clear
、獲取文本text
、獲取屬性get_attribute
等 - 其他方法: 頁面等待、frame 切換、調用JS、模擬鼠標鍵盤等
啟動瀏覽器
對於 WebDriver 的控制方法,先從對瀏覽器的基本控制說起。要操作網頁元素,首先需要啟動瀏覽器,下面的代碼就實現啟動瀏覽器,並打開百度首頁:
# 引入webdriver
from selenium import webdriver
# 啟動 chrome 瀏覽器
driver = webdriver.Chrome(executable_path='driver/chromedriver.exe')
# 打開百度首頁
driver.get("https://www.baidu.com")
executable_path:
Python + Selenium環境搭建 中提到了瀏覽器驅動的部署,一般我們都放在環境變量中,方便使用。
如果你不想放環境變量,可以通過此參數指定驅動 (如:chromedriver.exe) 的絕對路徑或相對路徑。
瀏覽器控制
控制瀏覽器大小
通過 WebDriver 打開瀏覽器一般默認都是窗口狀態(非全屏),這可能會導致某些網頁顯示不全,無法定位和操作某些頁面元素。
可以通過 WebDriver 控制瀏覽器的大小:
driver.maximize_window() # 瀏覽器最大化
driver.set_window_size(480, 800) # 設置瀏覽器480,800為像素大小
driver.minimize_window() # 瀏覽器最小化
一般,用 maximize_window() 方法最大化即可。
后退、前進
在使用瀏覽器的過程中,為了方便在瀏覽過的網頁之間切換,WebDriver 也提供了對應的 back() 和 forword() 方法來模擬后退和前進按鈕。
driver.back() # 后退到上一個頁面
driver.forward() # 前進到下一個頁面
如無特殊需要,不建議使用這兩個方法。
瀏覽器刷新
有時候需要手動刷新(F5)頁面,例如頁面上有些統計字段,當數據發生改變時,並不會及時變化,需要刷新頁面后才會變化。此時可以使用模擬瀏覽器刷新的方法 refresh()。
driver.refresh() # 瀏覽器刷新,與F5同理
退出
WebDriver 提供了兩種退出方式:close() 和 quit(),close() 方法只關閉當前窗口,quit() 則完全退出(刪除 session,並關閉瀏覽器驅動)。
driver.close() # 關閉當前窗口,不會關閉瀏覽器驅動
driver.quit() # 退出所有窗口並關閉瀏覽器驅動
關於 close() 與 quit():
close() 僅關閉當前窗口,不會關閉瀏覽器驅動。
某些瀏覽器默認情況下,只有一個窗口時,關閉窗口的時候也會自動關閉瀏覽器。這會造成一個錯覺,覺得 close() 也把瀏覽器關閉了。
對 WebDriver 來說,你並沒有關閉瀏覽器,你只是關閉了一個窗口而已,所以瀏覽器驅動還處於開啟狀態,Python 的進程也並未停止。
quit() 會關閉瀏覽器,刪除 session,清理運行過程。
所以,當你想退出時,使用 quit() 而不是 close()。