現在的網路世界跟以前真的差很多。幾乎每個網站都大量用上 JavaScript,內容會隨時動態載入——像是無限滑動、彈跳視窗,或是要點幾下才會出現資料的儀表板。其實,,這也代表傳統只會讀靜態 HTML 的爬蟲工具,常常撈不到真正有用的資訊。如果你曾經想從現代電商網站抓商品價格,或是從互動地圖上擷取房地產清單,卻發現原始碼裡根本沒有你要的資料,那種無力感一定很熟悉。
這時候,Selenium 就是你的救星。身為一個長期開發自動化工具、也爬過無數網站的工程師,我可以很有把握地說:學會 Selenium,就等於拿到動態資料擷取的超能力。這篇 selenium 網頁爬蟲教學,會帶你從環境安裝到自動化流程,一步步實作,還會示範怎麼結合 ,讓你輕鬆整理、匯出結構化資料。不管你是商業分析師、業務,還是對 Python selenium 網站資料擷取有興趣的自學者,都能學到實用技巧,甚至在 debug XPath 的時候會心一笑(因為這真的很磨耐性)。
什麼是 Selenium?為什麼用它來做網頁爬蟲?
先從基本的說起。 是一套開源框架,可以讓你用程式自動操作真實的瀏覽器(像 Chrome 或 Firefox)。你可以把它想像成一個機器人,能自動開網頁、點按鈕、填表單、滑動頁面,甚至執行 JavaScript,完全像真人一樣。這很重要,因為現代網站的資料常常不是一開始就顯示出來,而是要互動後才會載入。
為什麼這對爬蟲很重要?傳統的 BeautifulSoup 或 Scrapy 很適合處理靜態 HTML,但遇到 JavaScript 動態載入的內容就沒轍。Selenium 則能即時和網頁互動,非常適合:
- 擷取點「載入更多」後才出現的商品清單
- 抓動態更新的價格或評論
- 處理登入表單、彈跳視窗、無限滑動等互動元素
- 從儀表板、地圖等互動介面中提取資料
簡單說,只要你要抓「互動後才出現」的資料,Selenium 就是你的首選。
Python Selenium 網頁爬蟲的三大步驟
用 Selenium 做爬蟲,主要分三個重點步驟:
| 步驟 | 要做什麼 | 為什麼重要 |
|---|---|---|
| 1. 環境安裝 | 安裝 Selenium、WebDriver、Python 套件 | 工具準備好,避免安裝問題 |
| 2. 元素定位 | 用 ID、class、XPath 等找出目標資料 | 精準抓到你要的資訊,即使被 JavaScript 隱藏 |
| 3. 資料擷取與儲存 | 抓出文字、連結或表格,存成 CSV/Excel | 把網頁原始資料轉成可用格式 |
接下來會用實際範例和程式碼,帶你一步步操作。
步驟一:安裝 Python Selenium 環境
首先,你要安裝 Selenium 和瀏覽器驅動程式(像 ChromeDriver)。好消息是,現在安裝比以前簡單多了。
安裝 Selenium
打開終端機,輸入:
1pip install selenium
下載 WebDriver
- Chrome: 下載 (記得版本要和你的 Chrome 一樣)。
- Firefox: 下載 。
小提醒:Selenium 4.6 之後支援 Selenium Manager,可以自動下載驅動程式,幾乎不用再手動設定 PATH()。
Selenium「Hello World」範例
1from selenium import webdriver
2driver = webdriver.Chrome() # 或 webdriver.Firefox()
3driver.get("https://example.com")
4print(driver.title)
5driver.quit()
常見問題排解:
- 如果出現「找不到 driver」錯誤,檢查 PATH 或用 Selenium Manager。
- 瀏覽器和驅動程式版本要一致。
- 如果在沒有圖形介面的伺服器上執行,請參考下方 headless 模式。
步驟二:定位網頁元素,準備擷取資料
接下來就是重點:告訴 Selenium 你要抓哪些資料。網頁是由各種元素(div、span、table 等)組成,Selenium 提供多種定位方式。
常用定位方法
By.ID:用唯一的 ID 找元素By.CLASS_NAME:用 CSS class 找元素By.XPATH:用 XPath 表達式(彈性高,但比較容易失效)By.CSS_SELECTOR:用 CSS 選擇器(適合複雜查詢)
範例:
1from selenium.webdriver.common.by import By
2# 用 ID 找價格
3price = driver.find_element(By.ID, "price").text
4# 用 XPath 找標題
5title = driver.find_element(By.XPATH, "//h1").text
6# 用 CSS 選擇器找所有商品圖片
7images = driver.find_elements(By.CSS_SELECTOR, ".product img")
8for img in images:
9 print(img.get_attribute("src"))
小建議:優先用最簡單、最穩定的定位方式(ID > class > CSS > XPath)。如果資料載入有延遲,建議用顯式等待:
1from selenium.webdriver.support.ui import WebDriverWait
2from selenium.webdriver.support import expected_conditions as EC
3wait = WebDriverWait(driver, 10)
4price_elem = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".price")))
這樣可以避免資料還沒出現就報錯。
步驟三:擷取並儲存資料
找到元素後,就可以把資料抓下來,存成你要的格式。
擷取文字、連結、表格
假設你要抓一個商品表格:
1data = []
2rows = driver.find_elements(By.XPATH, "//table/tbody/tr")
3for row in rows:
4 cells = row.find_elements(By.TAG_NAME, "td")
5 data.append([cell.text for cell in cells])
用 Pandas 存成 CSV
1import pandas as pd
2df = pd.DataFrame(data, columns=["Name", "Price", "Stock"])
3df.to_csv("products.csv", index=False)
你也可以存成 Excel(df.to_excel("products.xlsx")),甚至用 Google Sheets API 上傳。
完整範例:擷取商品標題與價格
1from selenium import webdriver
2from selenium.webdriver.common.by import By
3import pandas as pd
4driver = webdriver.Chrome()
5driver.get("https://example.com/products")
6data = []
7products = driver.find_elements(By.CLASS_NAME, "product-card")
8for p in products:
9 title = p.find_element(By.CLASS_NAME, "title").text
10 price = p.find_element(By.CLASS_NAME, "price").text
11 data.append([title, price])
12driver.quit()
13df = pd.DataFrame(data, columns=["Title", "Price"])
14df.to_csv("products.csv", index=False)
Selenium、BeautifulSoup、Scrapy 差在哪?Selenium 的獨特優勢
到底什麼時候該用 Selenium?什麼時候 BeautifulSoup 或 Scrapy 更適合?快速比較如下:
| 工具 | 最適用情境 | 能處理 JavaScript 嗎? | 速度與資源消耗 |
|---|---|---|---|
| Selenium | 動態/互動型網站 | 可以 | 較慢,佔用較多記憶體 |
| BeautifulSoup | 靜態 HTML 抓取 | 不行 | 非常快,資源消耗低 |
| Scrapy | 大量靜態網站爬取 | 有限* | 超快、非同步、低記憶體 |
| Thunderbit | 無程式碼商業資料擷取 | 可以(AI) | 小型/中型任務速度快 |
*Scrapy 可以透過外掛處理部分動態內容,但不是強項()。
什麼時候用 Selenium?
- 需要點擊、滑動、登入後才出現資料
- 要處理彈跳視窗、無限滑動、互動儀表板
- 靜態爬蟲無法應付的情境
什麼時候用 BeautifulSoup/Scrapy?
- 資料就在初始 HTML 裡
- 要快速爬大量頁面
- 需要極低資源消耗
如果你想完全不用寫程式, 讓你用 AI 一鍵擷取動態網站,點「AI 建議欄位」就能匯出到 Sheets、Notion 或 Airtable(下方有詳細介紹)。
用 Selenium + Python 自動化爬蟲任務
說真的,沒有人想半夜兩點起來手動跑爬蟲。好消息是,你可以用 Python 的排程工具,或作業系統的排程(Linux/Mac 的 cron、Windows 的工作排程器)自動執行 Selenium 任務。
用 schedule 套件自動排程
1import schedule
2import time
3def job():
4 # 這裡放你的爬蟲程式碼
5 print("正在爬取...")
6schedule.every().day.at("09:00").do(job)
7while True:
8 schedule.run_pending()
9 time.sleep(1)
或用 Cron(Linux/Mac)
在 crontab 加入以下設定,每小時執行一次:
10 * * * * python /path/to/your_script.py
自動化小技巧:
- 用 headless 模式執行,避免彈出瀏覽器視窗。
- 記錄錯誤並設置通知,方便監控。
- 記得用
driver.quit()關閉瀏覽器,釋放資源。
提升 Selenium 爬蟲效率的實用技巧
Selenium 很強大,但如果沒優化,速度慢、資源吃緊是常見問題。這幾招能幫你加速又穩定:
- 使用 Headless 模式
不用每次都看到 Chrome 開關,headless 模式讓瀏覽器在背景執行:
1from selenium.webdriver.chrome.options import Options
2opts = Options()
3opts.headless = True
4driver = webdriver.Chrome(options=opts)
- 阻擋圖片等不必要內容
只抓文字就好,圖片不用載入,能大幅加快速度:
1prefs = {"profile.managed_default_content_settings.images": 2}
2opts.add_experimental_option("prefs", prefs)
- 用高效定位方式
- 優先用 ID 或簡單 CSS 選擇器,避免複雜 XPath。
- 避免
time.sleep(),改用顯式等待(WebDriverWait)。
- 隨機延遲
加入隨機等待,模擬真人瀏覽,降低被封鎖風險:
1import random, time
2time.sleep(random.uniform(1, 3))
- 變換 User Agent 與 IP(如有需要)
大量爬取時,建議隨機 User Agent 並考慮代理伺服器,避開簡單的反爬措施。
- 管理 Session 與錯誤
- 用 try/except 處理找不到元素等異常。
- 記錄錯誤、截圖方便除錯。
更多優化技巧可參考 。
進階應用:Selenium 結合 Thunderbit,輕鬆匯出結構化資料
這裡是進階玩法——如果你想省下整理資料的時間,直接匯出乾淨的表格。
用 Selenium 抓到原始資料後,可以用 進行:
- AI 自動辨識欄位: Thunderbit 的 AI 能讀你爬下來的網頁或 CSV,自動建議欄位名稱(「AI 建議欄位」)。
- 子頁面爬取: 有一串商品網址?Thunderbit 能自動逐一拜訪,補齊更多細節(像圖片、規格),完全不用寫額外程式。
- 資料加值: 即時翻譯、分類、分析資料。
- 一鍵匯出: 直接匯出到 Google Sheets、Airtable、Notion、CSV 或 Excel。
實作流程範例:
- 用 Selenium 抓商品網址與標題。
- 匯出成 CSV。
- 打開 Thunderbit,匯入 CSV,讓 AI 建議欄位。
- 用 Thunderbit 子頁面爬取功能,補抓每個商品頁的圖片或規格。
- 最後一鍵匯出到 Sheets 或 Notion。
這樣能省下大量人工整理時間,讓你專心分析資料。更多細節可參考 。
Selenium 網頁爬蟲最佳實踐與常見問題排解
網頁爬蟲就像釣魚:有時大豐收,有時卡在雜草裡。這裡有幾個讓你的爬蟲穩定又合規的小撇步:
最佳實踐
- 遵守 robots.txt 與網站規範: 先確認網站允不允許爬蟲。
- 適當延遲請求: 不要對伺服器造成負擔,注意 HTTP 429(請求過多)錯誤。
- 有 API 優先用 API: 公開 API 通常更穩定、合法。
- 只抓公開資料: 避免個資、敏感資訊,注意隱私法規。
- 處理彈窗與驗證碼: Selenium 可自動關閉彈窗,但驗證碼(CAPTCHA)很難自動化,請謹慎處理。
- 隨機 User Agent 與延遲: 降低被偵測、封鎖的機率。
常見錯誤與解法
| 錯誤 | 說明 | 解決方法 |
|---|---|---|
NoSuchElementException | 找不到元素 | 檢查定位方式,加入等待 |
| Timeout errors | 頁面或元素載入太慢 | 增加等待時間,檢查網路 |
| Driver/browser mismatch | Selenium 無法啟動瀏覽器 | 更新驅動程式與瀏覽器版本 |
| Session crashes | 瀏覽器意外關閉 | 用 headless 模式,管理資源 |
更多排解技巧可參考 。
結語與重點整理
動態網頁爬蟲早就不是資深工程師的專利。用 Python Selenium,你可以自動操作瀏覽器,輕鬆應對 JavaScript 密集的網站,抓出你要的商業資料——不管是銷售、研究,還是單純好奇。記得:
- Selenium 是動態、互動型網站的首選工具。
- 三大步驟:安裝、定位、擷取與儲存。
- 自動化腳本,定期更新資料。
- 用 headless、顯式等待、高效定位優化速度與穩定性。
- 結合 Thunderbit,輕鬆整理、匯出資料,省去表格清理的麻煩。
想親自試試嗎?從上面的程式碼範例開始,等你準備好進階應用時,不妨體驗 ,享受 AI 一鍵清理、匯出的便利。如果想學更多,歡迎追蹤 ,獲得更多教學、實戰案例與最新自動化資訊。
祝你爬蟲順利,定位永遠精準!
常見問題
-
為什麼用 Selenium 做網頁爬蟲,而不是 BeautifulSoup 或 Scrapy?
Selenium 適合抓動態網站,能處理用戶互動或 JavaScript 載入的內容。BeautifulSoup 和 Scrapy 速度快、適合靜態 HTML,但沒辦法模擬點擊、滑動等互動。 -
如何讓 Selenium 爬蟲跑得更快?
用 headless 模式、阻擋圖片等不必要資源、選用高效定位方式,並加入隨機延遲模擬真人行為。更多技巧可參考 。 -
可以自動排程 Selenium 爬蟲嗎?
當然可以!用 Python 的schedule套件或作業系統的排程工具(cron、工作排程器)定時執行腳本,讓資料自動更新。 -
Selenium 擷取的資料,怎麼匯出最方便?
用 Pandas 存成 CSV 或 Excel。如果要進階匯出(Google Sheets、Notion、Airtable),可將資料匯入 ,一鍵完成。 -
Selenium 如何處理彈窗與驗證碼?
彈窗可用定位方式自動關閉。驗證碼(CAPTCHA)則比較難自動化,建議人工處理或用專業服務,並務必遵守網站規範。
想看更多爬蟲教學、AI 自動化技巧,或掌握最新商業資料工具?歡迎訂閱 ,或追蹤我們的 看實戰影片。
延伸閱讀