Chrome is being controlled by automated test software.
簡介
現時越來越多的網站都有反自動化的機制,直接使用 selenium 十分容易觸發反自動化機制。
除此之外,在使用 selenium 開啟瀏覽器,預設開啟的是一個全新的瀏覽器,而且沒有儲存任何 cookies 等信息,終究會有些動作可能需要手動處理(e.g 電話驗證碼輸入),為此整合了一些避過檢測和完成手動動作的方法。
這次遇到的問題是 Cloudflare 的 Turnstile。
直接使用 selenium 打開網站(例),即使手動點擊了驗證,仍會一直循環要求驗證。
加上 Cloudflare 相關的 cookie
不使用 selenium 時,從 DevTools 中可以看到成功進入網站後會有特定的 cookie cf_clearance
1,嘗試預先添加該 cookie 2。
但並沒有效果。
加上 headers
嘗試同時加上 User-Agent
等 headers,一樣沒有效果。
|
|
更改 webdriver 屬性
移除 Chrome is being controlled by automated test software.
的標示:
|
|
有部份網站會透過檢查 webdriver 的屬性來識別是否有異常,所以同時透過以下方法移除:
|
|
或
|
|
無效。
使用 undetected-chromedriver 代替 chromedrive
較常被提及的 undetected-chromedriver 是經過修過的 Chrome driver,可以隱藏 chrome driver 的使用痕跡,從而避免被檢測。
但是,無效。
但當然,有可能是 Cloudflare Turnstile 有所更新而 undetected-chromedriver 未有更新所致,不深入考究。
預先執行需手動的動作
在使用 selenium 開啟瀏覽器,預設開啟的是一個全新的瀏覽器,而且沒有儲存任何 cookies 等信息。
這時可以在 terminal 或 cmd 中透過手動的方式開啟瀏覽器:
MacOS:
|
|
Windows:
|
|
其中 user-data-dir
是 chrome 儲存 profile data 的位置,例如 history、bookmarks 和 cookies 等。
例如手動登入帳號的資料就會儲存在該目錄中。這邊則是透過手動完成 Cloudflare Turnstile 驗證取得 cookie,然後便可以使用 selenium 透過該瀏覽器進入網站:
|
|
實例
GitHub - kinwang94/plate-crawler
部份參考和研究資料:
https://blog.csdn.net/sinat_29957455/article/details/122242196
https://blog.csdn.net/yuanziwoxin/article/details/122513693
https://blog.csdn.net/Scott0902/article/details/127024380
https://www.cnblogs.com/lovealways/p/9813059.html
https://zhuanlan.zhihu.com/p/328768200