Selenium 是一個用于自動化 Web 瀏覽器操作的強大工具,廣泛應用于 Web 應用程序測試、網頁數據抓取和任務自動化等場景。
Selenium 為各種編程語言提供了 API,用作測試。 目前的官方 API 文檔有 C#、JavaScript、Java、Python、Ruby。
安裝 Selenium 和 WebDriver
安裝 Selenium
要開始使用 Selenium,首先需要安裝 selenium 庫,并下載適用于你瀏覽器的 WebDriver。
使用 pip 安裝 Selenium:
pip install selenium
安裝完成后,可以使用以下命令查看 selenium 的版本信息:
pip show selenium
也可以使用 Python 代碼查看:
import selenium
print(selenium.__version__)
下載WebDriver
Selenium 需要一個 WebDriver 來與瀏覽器進行交互。
不同的瀏覽器需要不同的 WebDriver,例如 Chrome 瀏覽器需要 ChromeDriver,你需要根據你使用的瀏覽器下載相應的 WebDriver,并確保它在你的系統 PATH 中。
- Chrome: ChromeDriver
- Firefox: GeckoDriver
- Edge: EdgeDriver
- Safari: SafariDriver
選擇瀏覽器并初始化 WebDriver:
實例
from selenium import webdriver
# 使用 Chrome 瀏覽器
driver = webdriver.Chrome(executable_path=‘/path/to/chromedriver’)
# 或者使用 Firefox 瀏覽器
# driver = webdriver.Firefox(executable_path=‘/path/to/geckodriver’)
# 或者使用 Edge 瀏覽器
# driver = webdriver.Edge(executable_path=‘/path/to/msedgedriver’)
從 Selenium 4 開始,在瀏覽器驅動的管理方式上發生了變化:Selenium 4 嘗試自動檢測系統中安裝的瀏覽器版本,并下載相應的驅動程序,這意味著用戶不再需要手動下載和設置驅動程序路徑,除非他們需要特定版本的驅動程序。
實例
from selenium import webdriver
driver = webdriver.Chrome() # 如果使用其他瀏覽器,如 Firefox,需要相應修改
當國內的網絡環境,自動檢測下載驅動需要不一樣的網絡環境,所以建議手動下載驅動,然后指定驅動路徑。
在 Selenium 4 中,不再直接在 webdriver.Chrome 中設置驅動程序路徑,而是通過引入 Service 對象來設置。這樣可以避免棄用警告,并確保驅動程序的正確加載。例如:
實例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
service = ChromeService(executable_path=“PATH_TO_DRIVER”)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
以下代碼指定驅動文件路徑來獲取網頁標題:
實例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 設置正確的驅動路徑
service = ChromeService(executable_path=“/RUNOOB/Downloads/chromedriver-mac-arm64/chromedriver”)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打開一個網站
driver.get(“https://cn.bing.com”)
# 獲取頁面標題
print(driver.title)
# 關閉瀏覽器
driver.quit()
基本用法
初始化 WebDriver
選擇瀏覽器并初始化 WebDriver:
實例
from selenium import webdriver
# 使用 Chrome 瀏覽器
driver = webdriver.Chrome()
# 或者使用 Firefox 瀏覽器
# driver = webdriver.Firefox()
# 或者使用 Edge 瀏覽器
# driver = webdriver.Edge()
打開網頁
使用 get() 方法打開網頁:
driver.get("https://www.baidu.com")
查找頁面元素
可以通過多種方式查找頁面元素,例如使用 ID、類名、標簽名等:
實例
# 通過 ID 查找元素
search_box = driver.find_element(“id”, “kw”)
# 通過類名查找元素
search_button = driver.find_element(“class name”, “s_ipt”)
# 通過標簽名查找元素
links = driver.find_elements(“tag name”, “a”)
模擬用戶操作
Selenium 可以模擬用戶在瀏覽器中的操作,例如點擊、輸入文本等:
實例
# 在搜索框中輸入文本
search_box.send_keys(“Selenium Python”)
# 點擊搜索按鈕
search_button.click()
獲取元素屬性和文本
可以獲取頁面元素的屬性值或文本內容:
實例
# 獲取元素的文本
element_text = search_box.text
# 獲取元素的屬性值
element_attribute = search_box.get_attribute(“placeholder”)
等待
有時頁面加載需要時間,可以使用顯式等待或隱式等待來確保元素可操作:
實例
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 顯式等待
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, “kw”))
)
# 隱式等待
driver.implicitly_wait(10)
關閉瀏覽器
操作完成后,記得關閉瀏覽器:
driver.quit()
簡單的網頁自動化
下面是一個簡單的 Selenium 項目示例,用于自動化搜索關鍵詞,并獲取結果頁面的標題。
實例
from selenium import webdriver
from selenium.webdriver.common.by import By # 導入 By 模塊
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 設置驅動的路徑,啟動瀏覽器
service = ChromeService(executable_path=“/RUNOOB/Downloads/chromedriver-mac-arm64/chromedriver”)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
try:
# 打開百度首頁
driver.get(“https://www.baidu.com”)
\# 查找搜索框元素
search\_box \= driver.find\_element(By.ID, "kw")\# 輸入搜索內容
search\_box.send\_keys("Selenium Python")\# 提交搜索表單
search\_box.send\_keys(Keys.RETURN)\# 等待搜索結果加載
WebDriverWait(driver, 10).until( EC.presence\_of\_element\_located((By.ID, "content\_left"))
)\# 打印頁面標題
print("頁面標題是:", driver.title)
finally:
# 關閉瀏覽器
driver.quit()
selenium 常用方法
下表列出了 selenium 庫的常用方法:
方法 | 說明 | 示例代碼 |
---|---|---|
webdriver.Chrome() | 初始化 Chrome 瀏覽器實例。 | driver = webdriver.Chrome() |
driver.get(url) | 訪問指定的 URL 地址。 | driver.get("https://example.com") |
driver.find_element(By, value) | 查找第一個匹配的元素。 | element = driver.find_element(By.ID, "id") |
driver.find_elements(By, value) | 查找所有匹配的元素。 | elements = driver.find_elements(By.CLASS_NAME, "class") |
element.click() | 點擊元素。 | element.click() |
element.send_keys(value) | 向輸入框中發送鍵盤輸入。 | element.send_keys("text") |
element.text | 獲取元素的文本內容。 | text = element.text |
driver.back() | 瀏覽器后退。 | driver.back() |
driver.forward() | 瀏覽器前進。 | driver.forward() |
driver.refresh() | 刷新當前頁面。 | driver.refresh() |
driver.execute_script(script, *args) | 執行 JavaScript 腳本。 | driver.execute_script("alert('Hello!')") |
driver.switch_to.frame(frame_reference) | 切換到指定的 iframe。 | driver.switch_to.frame("frame_id") |
driver.switch_to.default_content() | 切換回主文檔。 | driver.switch_to.default_content() |
driver.quit() | 關閉瀏覽器并退出驅動。 | driver.quit() |
driver.close() | 關閉當前窗口。 | driver.close() |