進階爬蟲工具 Python-Selenium : 安裝和使用ChromeDriver
在 Selenium 中,「定位」指的是找到 HTML 頁面中的某個元素,進而進行操作(如點擊、輸入文字等)。Selenium 提供了多種定位方法來對應不同的需求,讓我們可以針對頁面元素進行精確操作。
根據元素的 id 屬性進行定位。
使用情境:id 是唯一標識,適合用來快速精確地定位元素。
範例:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
element = driver.find_element(By.ID, "unique-id")
print(element.text)
driver.quit()
根據元素的 name 屬性進行定位。
使用情境:表單元素(如輸入框)通常會有 name 屬性。
範例:
element = driver.find_element(By.NAME, "username")
根據元素的 class 屬性定位。
使用情境:適合用於定位特定樣式的元素,但當有多個元素共享同一 class 時需要謹慎。
範例:
element = driver.find_element(By.CLASS_NAME, "btn-primary")
根據 HTML 標籤名稱定位。
使用情境:想找到特定類型的元素(如所有的 或 )。
範例:
element = driver.find_element(By.TAG_NAME, "h1")
根據超連結文字進行定位。
使用情境:想要定位到某個超連結,且知道其顯示的文字內容。
範例:
element = driver.find_element(By.LINK_TEXT, "Click here")
根據部分超連結文字進行定位。
使用情境:超連結的文字太長,只需提供關鍵部分。
範例:
element = driver.find_element(By.PARTIAL_LINK_TEXT, "Click")
使用 XPath 表達式定位元素。
使用情境:結構化查詢,適合處理複雜的層次結構或沒有穩定標識的元素。
範例:
element = driver.find_element(By.XPATH, "//div[@class='example-class']")
使用 CSS 選擇器定位元素。
使用情境:靈活且簡潔的選擇器語法,適合大部分場景。
範例:
element = driver.find_element(By.CSS_SELECTOR, "div.example-class > span")
Selenium 也支持批量定位(返回多個元素)。
方法
find_elements(By.XXX, "value")
返回一個元素列表。
範例:
elements = driver.find_elements(By.CLASS_NAME, "list-item")
for element in elements:
print(element.text)
元素動態生成
解決方法:使用顯式等待(WebDriverWait)確保元素已經渲染。
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, "dynamic-id"))
)
解決方法:使用 XPath 或 CSS 定位。
多個元素重疊
解決方法:嘗試提高定位條件的精確度。
定位方法對比
方法 | 優點 | 缺點 |
---|---|---|
By.ID | 精確快速 | 需保證 id 唯一且存在 |
By.NAME | 簡單易用,適合表單 | 多元素可能共享 name |
By.CLASS_NAME | 適合樣式一致的元素 | 需確保目標元素不被混淆 |
By.TAG_NAME | 適合查找通用元素 | 精確度較低 |
By.LINK_TEXT | 適合操作超連結 | 依賴文字,易因變化失效 |
By.XPATH | 靈活、強大 | 複雜,且容易破壞可讀性 |
By.CSS_SELECTOR | 快速、靈活,適合大部分情況 | 複雜結構的定位可能較難編寫 |
Selenium 提供多種定位方式以滿足不同場景的需求。
選擇定位方式時應考慮目標元素的唯一性、穩定性和易讀性。
XPath 和 CSS 選擇器最靈活,但可能會使代碼變得不易維護。
點這裡看更多
tqdm 是 Python 的一個第三方庫
用於顯示迴圈或任務的進度條,讓開發者可以更直觀地了解程序執行的進度。這在執行長時間運行的任務(如迴圈處理、大型文件的讀寫、爬蟲等)時非常有用。