【selenium】headless模式下遇到403反爬蟲校驗(Human verification)


headless模式下遇到 403 反爬蟲校驗 (Human verification)

被反爬蟲校驗困擾了很久,今天終於解決,在此記錄一下。

問題描述

工作需要爬取一些文章,本來想使用 go 簡單寫一下,沒想到遇到了反爬蟲的人機校驗,頁面被攔截,返回 403 ,於是后面遇到了一個又一個的問題。
期間嘗試了 go 的 xpathcolly,以及 chromedp,均沒有成功。
后來又嘗試 python 的 scrapy ,最后是在嘗試 selenium 關閉 headless 時,成功避開了 Human verification 。但是開啟 headless 還是會出現 403 。

后來,在本地可以正常運行,但是部署到 linux 系統下,又冒出了新的問題,chromedriver 調用 chrome 失敗,因為 chrome 在啟動期間崩潰了。
在 stackoverflow 上查到是的解決方式一一嘗試后均未解決,最后發現都需要設置一下 options.add_argument('--headless')
也就是說,最后還是要把 headless 啟動,但是啟動 headless 又會遇到 Human verification 。

兜兜轉轉一圈,最后還是要解決 403 的問題。

解決方式

因為在嘗試 scrap y時,scrapy 是配置了 User-Agent 的,后來沒有成功,所以后來在嘗試 selenium 時,把這個注意的點忽略了。
我在開啟 headless 后,同樣也關閉了 sandbox ,手動配置了一下 User-Agent 就解決了。
下面是我的代碼

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('lang=zh-CN.UTF-8')
options.add_argument(f'user-agent={settings.USER_AGENT}')
prefs = {
    'profile.managed_default_content_settings.images': 2,
    'profile.managed_default_content_settings.notifications': 2,
    'intl.accept_languages': 'zh-CN,zh;q=0.9,en;q=0.5',
}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)

如果這種方式還是沒有解決,還有一種方式可以嘗試,那就是使用 mitmproxy 或者 charles ,在 selenium 請求時加上一層代理,我在本地可以調通,但是我還沒有在 linux 上嘗試 。

推薦閱讀

How does reCAPTCHA 3 know I'm using Selenium/chromedriver?

Way to change Google Chrome user agent in Selenium?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM