Python Selenium 網頁爬蟲教學:逐步實作指南

最後更新於 January 23, 2026

現在的網路世界跟以前真的差很多。幾乎每個網站都大量用上 JavaScript,內容會隨時動態載入——像是無限滑動、彈跳視窗,或是要點幾下才會出現資料的儀表板。其實,,這也代表傳統只會讀靜態 HTML 的爬蟲工具,常常撈不到真正有用的資訊。如果你曾經想從現代電商網站抓商品價格,或是從互動地圖上擷取房地產清單,卻發現原始碼裡根本沒有你要的資料,那種無力感一定很熟悉。

這時候,Selenium 就是你的救星。身為一個長期開發自動化工具、也爬過無數網站的工程師,我可以很有把握地說:學會 Selenium,就等於拿到動態資料擷取的超能力。這篇 selenium 網頁爬蟲教學,會帶你從環境安裝到自動化流程,一步步實作,還會示範怎麼結合 ,讓你輕鬆整理、匯出結構化資料。不管你是商業分析師、業務,還是對 Python selenium 網站資料擷取有興趣的自學者,都能學到實用技巧,甚至在 debug XPath 的時候會心一笑(因為這真的很磨耐性)。

什麼是 Selenium?為什麼用它來做網頁爬蟲? selenium-dynamic-vs-static-web-scraping.png 先從基本的說起。 是一套開源框架,可以讓你用程式自動操作真實的瀏覽器(像 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-vs-traditional-scrapers-comparison.png 到底什麼時候該用 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 很強大,但如果沒優化,速度慢、資源吃緊是常見問題。這幾招能幫你加速又穩定:

  1. 使用 Headless 模式

不用每次都看到 Chrome 開關,headless 模式讓瀏覽器在背景執行:

1from selenium.webdriver.chrome.options import Options
2opts = Options()
3opts.headless = True
4driver = webdriver.Chrome(options=opts)
  1. 阻擋圖片等不必要內容

只抓文字就好,圖片不用載入,能大幅加快速度:

1prefs = {"profile.managed_default_content_settings.images": 2}
2opts.add_experimental_option("prefs", prefs)
  1. 用高效定位方式
  • 優先用 ID 或簡單 CSS 選擇器,避免複雜 XPath。
  • 避免 time.sleep(),改用顯式等待(WebDriverWait)。
  1. 隨機延遲

加入隨機等待,模擬真人瀏覽,降低被封鎖風險:

1import random, time
2time.sleep(random.uniform(1, 3))
  1. 變換 User Agent 與 IP(如有需要)

大量爬取時,建議隨機 User Agent 並考慮代理伺服器,避開簡單的反爬措施。

  1. 管理 Session 與錯誤
  • 用 try/except 處理找不到元素等異常。
  • 記錄錯誤、截圖方便除錯。

更多優化技巧可參考

進階應用:Selenium 結合 Thunderbit,輕鬆匯出結構化資料

這裡是進階玩法——如果你想省下整理資料的時間,直接匯出乾淨的表格。

用 Selenium 抓到原始資料後,可以用 進行:

  • AI 自動辨識欄位: Thunderbit 的 AI 能讀你爬下來的網頁或 CSV,自動建議欄位名稱(「AI 建議欄位」)。
  • 子頁面爬取: 有一串商品網址?Thunderbit 能自動逐一拜訪,補齊更多細節(像圖片、規格),完全不用寫額外程式。
  • 資料加值: 即時翻譯、分類、分析資料。
  • 一鍵匯出: 直接匯出到 Google Sheets、Airtable、Notion、CSV 或 Excel。

實作流程範例:

  1. 用 Selenium 抓商品網址與標題。
  2. 匯出成 CSV。
  3. 打開 Thunderbit,匯入 CSV,讓 AI 建議欄位。
  4. 用 Thunderbit 子頁面爬取功能,補抓每個商品頁的圖片或規格。
  5. 最後一鍵匯出到 Sheets 或 Notion。

這樣能省下大量人工整理時間,讓你專心分析資料。更多細節可參考

Selenium 網頁爬蟲最佳實踐與常見問題排解

網頁爬蟲就像釣魚:有時大豐收,有時卡在雜草裡。這裡有幾個讓你的爬蟲穩定又合規的小撇步:

最佳實踐

  • 遵守 robots.txt 與網站規範: 先確認網站允不允許爬蟲。
  • 適當延遲請求: 不要對伺服器造成負擔,注意 HTTP 429(請求過多)錯誤。
  • 有 API 優先用 API: 公開 API 通常更穩定、合法。
  • 只抓公開資料: 避免個資、敏感資訊,注意隱私法規。
  • 處理彈窗與驗證碼: Selenium 可自動關閉彈窗,但驗證碼(CAPTCHA)很難自動化,請謹慎處理。
  • 隨機 User Agent 與延遲: 降低被偵測、封鎖的機率。

常見錯誤與解法

錯誤說明解決方法
NoSuchElementException找不到元素檢查定位方式,加入等待
Timeout errors頁面或元素載入太慢增加等待時間,檢查網路
Driver/browser mismatchSelenium 無法啟動瀏覽器更新驅動程式與瀏覽器版本
Session crashes瀏覽器意外關閉用 headless 模式,管理資源

更多排解技巧可參考

結語與重點整理

動態網頁爬蟲早就不是資深工程師的專利。用 Python Selenium,你可以自動操作瀏覽器,輕鬆應對 JavaScript 密集的網站,抓出你要的商業資料——不管是銷售、研究,還是單純好奇。記得:

  • Selenium 是動態、互動型網站的首選工具。
  • 三大步驟:安裝、定位、擷取與儲存。
  • 自動化腳本,定期更新資料。
  • 用 headless、顯式等待、高效定位優化速度與穩定性。
  • 結合 Thunderbit,輕鬆整理、匯出資料,省去表格清理的麻煩。

想親自試試嗎?從上面的程式碼範例開始,等你準備好進階應用時,不妨體驗 ,享受 AI 一鍵清理、匯出的便利。如果想學更多,歡迎追蹤 ,獲得更多教學、實戰案例與最新自動化資訊。

祝你爬蟲順利,定位永遠精準!

免費體驗 Thunderbit 人工智慧網頁爬蟲

常見問題

  1. 為什麼用 Selenium 做網頁爬蟲,而不是 BeautifulSoup 或 Scrapy?
    Selenium 適合抓動態網站,能處理用戶互動或 JavaScript 載入的內容。BeautifulSoup 和 Scrapy 速度快、適合靜態 HTML,但沒辦法模擬點擊、滑動等互動。

  2. 如何讓 Selenium 爬蟲跑得更快?
    用 headless 模式、阻擋圖片等不必要資源、選用高效定位方式,並加入隨機延遲模擬真人行為。更多技巧可參考

  3. 可以自動排程 Selenium 爬蟲嗎?
    當然可以!用 Python 的 schedule 套件或作業系統的排程工具(cron、工作排程器)定時執行腳本,讓資料自動更新。

  4. Selenium 擷取的資料,怎麼匯出最方便?
    用 Pandas 存成 CSV 或 Excel。如果要進階匯出(Google Sheets、Notion、Airtable),可將資料匯入 ,一鍵完成。

  5. Selenium 如何處理彈窗與驗證碼?
    彈窗可用定位方式自動關閉。驗證碼(CAPTCHA)則比較難自動化,建議人工處理或用專業服務,並務必遵守網站規範。

想看更多爬蟲教學、AI 自動化技巧,或掌握最新商業資料工具?歡迎訂閱 ,或追蹤我們的 看實戰影片。

延伸閱讀

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
使用 selenium 進行爬蟲Selenium 網頁爬蟲教學Python selenium 網站資料擷取
目錄

立即體驗 Thunderbit

兩步驟快速擷取名單與其他資料,AI 智能支援。

下載 Thunderbit 免費使用
用 AI 擷取資料
輕鬆將資料匯入 Google Sheets、Airtable 或 Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week