Selenium簡介
Selenium 是一個可以 自動化操作網頁 的工具,適合用來 測試網頁、模擬點擊、填寫表單,甚至抓取動態網頁的數據。
1. 安裝 Selenium
首先,安裝 selenium
:
⚠ 需要 WebDriver!
Note
2022年11月4日之後 ,selenium(4.6.0+)有內建 selenium manager,如果在特定的路徑上沒有找到webdriver,selenium會自動幫你下載。
Selenium 需要瀏覽器的 WebDriver 來操作網頁,請下載與瀏覽器對應的 WebDriver:
- Chrome → 下載 ChromeDriver
- Firefox → 下載 GeckoDriver
下載後,將 WebDriver 放在 Python 可以找到的路徑(例如專案資料夾內)。
2. 使用 Selenium 自動開啟網頁
from selenium import webdriver
# 設定 WebDriver(這裡以 Chrome 為例)
driver = webdriver.Chrome() # 確保 chromedriver 在路徑內
# 開啟網頁
driver.get("https://www.google.com")
# 顯示標題
print(driver.title)
# 關閉瀏覽器
driver.quit()
3. 找到網頁元素並進行操作
Selenium 可以透過 id、class、tag、CSS selector、XPath 來尋找網頁元素:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.google.com")
# 找到搜尋框,輸入文字
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium Python")
# 提交表單(模擬 Enter)
search_box.submit()
# 等待幾秒(可選)
import time
time.sleep(3)
# 關閉瀏覽器
driver.quit()
4. 模擬按鈕點擊
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.google.com")
# 找到搜尋框
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium Python")
search_box.send_keys(Keys.RETURN) # 按下 Enter 鍵
# 等待 5 秒後關閉
import time
time.sleep(5)
driver.quit()
5. 爬取動態內容
某些網站的內容是透過 JavaScript 動態載入,Selenium 可以等待內容加載後再抓取:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
# 等待元素出現(最多等待 10 秒)
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "dynamic-content"))
)
print(element.text) # 取得動態載入的內容
driver.quit()
6. 無頭模式(Headless Mode)
如果不想開啟視窗,可以使用 無頭模式:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless") # 無頭模式
driver = webdriver.Chrome(options=options)
driver.get("https://www.google.com")
print(driver.title)
driver.quit()
7. 總結
功能 | 方法 |
---|---|
開啟網頁 | driver.get(url) |
找到元素 | find_element(By.ID, "id") |
輸入文字 | send_keys("text") |
點擊按鈕 | click() |
模擬 Enter | send_keys(Keys.RETURN) |
等待元素載入 | WebDriverWait(driver, 10).until(...) |
無頭模式 | Options().add_argument("--headless") |