在開發 Python Selenium 爬蟲遇到了不少坑,花了很多時間找問題和解決方法,所以記錄一下,希望遇到相同問題的人有幫助
Table
Python Selenium Webdriver 異常記錄
發生 selenium.common.exceptions.TimeoutException 問題:
可以在 driver 這邊設定 timeout 超時時間
1 |
driver.set_page_load_timeout(110) |
1 |
try:<br> "do something"<br><br>except TimeoutException as e:<br> driver.close()<br> driver.quit()<br> time.sleep(10)<br> break |
發生 ConnectionResetError: [Errno 104] Connection reset by peer 問題:
1 |
try:<br> "do something"<br><br>except ConnectionResetError as e:<br> driver.close()<br> driver.quit()<br> time.sleep(10)<br> break |
發生 NameError: name ‘NoSuchElementException’ is not defined 問題:
1 |
try:<br> "do something"<br><br>except NoSuchElementException as e:<br> driver.close()<br> driver.quit()<br> time.sleep(10)<br> break |
如何清除殭屍線程
1 |
import os<br><br>os.system('pkill chrome')<br>os.system("kill $(ps aux | grep webdriver| awk '{print $2}')") |
- ps 是拿到所有到 processes
- grep 是篩選出 webdriver
- awk 是拿到PID
- kill 是殺掉所有列出的PID
1 |
num=100<br><br>for i in range(int(len(df)/num)):<br><br> indices = rand_ind[num*i : num*i + num]<br> sub_df[i] = df.iloc[indices]<br> url_list = sub_df[i]['網址'].tolist()<br> <br> # 清除殭屍線程<br> os.system("kill $(ps aux | grep webdriver| awk '{print $2}')")<br> # 開始線程<br> treadline(url_list) |
2019/12/23補充:
爬取高鐵票券問題:
最近朋友問說在學習爬取高鐵票券系統時,已經有帶 User agent 為何還是會被判定為權限不足,最後發現 Chrome 在最新版本會在瀏覽器頂部顯示 ” Chrome正在由自動軟體測試控制”,目前的解法是加上'excludeSwitches'
的選項。
1 |
options.add_experimental_option('excludeSwitches', ['enable-automation']) |
關於更多 selenium 參數可以參考這篇:selenium启动Chrome配置参数问题
2020/02/14補充:
Selenium 不開啟瀏覽器模式,爬取資料失敗
最近有朋友問說使用 selenium 爬蟲正常可以抓到 50 筆資料,但加上 options.add_argument(“–headless”) 不開啟瀏覽器的無頭模式就只剩 3筆資料。
原因很簡單,因為他有使用到 scroll_height 讓視窗滾動的部分,而他設定的視窗大小是 driver.maximize_window() 視窗最大化
這時候只需要將修改瀏覽器大小 window-size=1920,1080 設定,即可正常運行
1 |
options = Options()<br>options.add_argument("--headless") # 不要開啟瀏覽器<br>options.add_argument("window-size=1920,1080") # 設定瀏覽器大小<br>driver = webdriver.Chrome('./chromedriver',options=options) |
最後~
▍關於 Selenium 相關其他文章,可以參考:
▍關於與 Concurrency Programming 相關其他文章,可以參考:
- 【Python教學】淺談 Concurrency Programming
- 【Python教學】淺談 GIL & Thread-safe & Atomic
- 【Python教學】淺談 Multi-processing & Multi-threading 使用方法
- 【Python教學】淺談 Multi-processing pool 使用方法
▍關於 Async IO 相關其他文章,可以參考:
- 【Python教學】淺談 Coroutine 協程使用方法
- 【Python教學】Async IO Design Patterns 範例程式
- 【實戰篇】 解析 Python 之父寫的 web crawler 異步爬蟲
那麼有關於【爬蟲筆記】Python Selenium Webdriver 異常問題集 的介紹就到這邊告一個段落囉!有任何問題可以在以下留言~
有關 Max行銷誌的最新文章,都會發佈在 Max 的 Facebook 粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!
在〈【爬蟲筆記】Python Selenium Webdriver異常問題集〉中有 1 則留言
你好,關於python這問題,我很好奇,為什麼
為什麼selenium要用from selenium import webdriver 不能使用import selenium就好?
webdriver 不是selenium的一部分?
我始終搞不太懂from import和import的差別,原本以為搞懂了,看到selenium又不懂了……
留言功能已關閉。