1. 自動滾動頁面
想像一下,你正坐在那個既恐怖又熟悉的社群媒體動態牆上,內容在你滾動時懶洋洋地載入。這種神奇的滾動功能竟然可以用 Selenium 的 API 來自動化。
方法 execute_script()
Selenium 的 execute_script()
方法讓你可以執行頁面的 JavaScript 代碼,這是個強大的工具,特別是在實現滾動功能方面。讓我們來看看如何用它滾動頁面。
from selenium import webdriver
import time
# 初始化瀏覽器驅動
driver = webdriver.Chrome()
# 開啟目標頁面
driver.get('https://example.com/scrolling_page')
# 頁面向下滾動
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3) # 等待內容載入完成
# 頁面向上滾動(為了多樣性)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")
# 結束 session
driver.quit()
在這段程式碼中,我們使用 window.scrollTo()
來滾動頁面。參數 (0, document.body.scrollHeight)
表示從頁面頂部滾動到最底部。這是確保動態元素載入的一個簡單有效的技術。
為什麼這很重要?
使用 execute_script()
來滾動頁面能載入原本隱藏的內容,例如無窮滾動的情況。這對社交媒體和新聞流特別有用,因為內容通常是動態載入的。
2. 點擊連結
現在我們已經掌握了滾動功能,是時候進一步學習自動點擊連結了。這是抓取資料的重要技巧,特別是當資訊分布在不同頁面時。
點擊連結的基礎
為了點擊連結,我們可以對選定的元素使用 click()
方法。讓我們來看一個簡單的例子:
from selenium import webdriver
# 初始化瀏覽器驅動
driver = webdriver.Chrome()
# 開啟目標頁面
driver.get('https://example.com/links_page')
# 根據文字內容尋找連結並點擊
link = driver.find_element_by_link_text('Next Page')
link.click()
# 結束 session
driver.quit()
在這個例子中,我們根據連結的文字內容來尋找它。但如果文字不唯一呢?在這種情況下,可以使用更精確的方法,例如 find_element_by_xpath()
或 find_element_by_css_selector()
。
# 使用 XPath 尋找連結
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()
自動點擊連結的優勢
使用 Selenium 點擊連結可以自動化抓取分頁內容的流程,或者當資料分散在網站的多個部分時。這對於遍歷搜尋結果或瀏覽電子商城的產品目錄特別有幫助。
3. 結合滾動與點擊
現在想像一下,你需要滾動頁面來找到特定的連結或元素,然後再跳轉到另一個頁面。這是一個可以自動化的複合操作。
結合範例程式碼
from selenium import webdriver
import time
# 初始化瀏覽器驅動
driver = webdriver.Chrome()
# 開啟目標頁面
driver.get('https://example.com/scroll_and_click')
# 滾動頁面以載入隱藏元素
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
# 尋找並點擊特定連結
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()
# 結束 session
driver.quit()
可能會遇到什麼問題?
在處理動態頁面時,有時候元素可能無法及時載入或完全載入。在這種情況下,需要使用等待的方法,確保你想操作的元素已經準備好。
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.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()
使用等待方法能避免因元素未準備好而導致的錯誤,讓程式運行得更穩定。
GO TO FULL VERSION