iT邦幫忙

0

Python 爬蟲系列:Selenium : 進階定位 find

  • 分享至 

  • xImage
  •  

進階爬蟲工具 Python-Selenium : 安裝和使用ChromeDriver

在 Selenium 中,「定位」指的是找到 HTML 頁面中的某個元素,進而進行操作(如點擊、輸入文字等)。Selenium 提供了多種定位方法來對應不同的需求,讓我們可以針對頁面元素進行精確操作。

常見的定位方法

1. find_element(By.ID)

根據元素的 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()

2. find_element(By.NAME)

根據元素的 name 屬性進行定位。
使用情境:表單元素(如輸入框)通常會有 name 屬性。
範例:

element = driver.find_element(By.NAME, "username")

3. find_element(By.CLASS_NAME)

根據元素的 class 屬性定位。
使用情境:適合用於定位特定樣式的元素,但當有多個元素共享同一 class 時需要謹慎。
範例:

element = driver.find_element(By.CLASS_NAME, "btn-primary")

4. find_element(By.TAG_NAME)

根據 HTML 標籤名稱定位。
使用情境:想找到特定類型的元素(如所有的 或 )。
範例:

element = driver.find_element(By.TAG_NAME, "h1")

5. find_element(By.LINK_TEXT)

根據超連結文字進行定位。
使用情境:想要定位到某個超連結,且知道其顯示的文字內容。
範例:

element = driver.find_element(By.LINK_TEXT, "Click here")

6. find_element(By.PARTIAL_LINK_TEXT)

根據部分超連結文字進行定位。
使用情境:超連結的文字太長,只需提供關鍵部分。
範例:

element = driver.find_element(By.PARTIAL_LINK_TEXT, "Click")

7. find_element(By.XPATH)

使用 XPath 表達式定位元素。
使用情境:結構化查詢,適合處理複雜的層次結構或沒有穩定標識的元素。
範例:

element = driver.find_element(By.XPATH, "//div[@class='example-class']")

8. find_element(By.CSS_SELECTOR)

使用 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 的一個第三方庫
用於顯示迴圈或任務的進度條,讓開發者可以更直觀地了解程序執行的進度。這在執行長時間運行的任務(如迴圈處理、大型文件的讀寫、爬蟲等)時非常有用。

Python 爬蟲系列:定位 find , select


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言