https://www.cnblogs.com/superhin 這個人的博客給了我啓發。
1. 使用開發者模式
chrome_option = webdriver.ChromeOptions()
chrome_option.add_experimental_option('excludeSwitches', ['enable-automation'])
webdriver = webdriver.Chrome(options=chrome_option)
使用開發者模式簡單快捷,但是缺點也很明顯,僅僅在首次登陸時候window.navigator.webdriver檢測不到,登陸以後當有新的表單提交時候,就會被檢測到。之後被反爬後滑塊驗證碼一般都通過不了。
2. 中間攔截js
使用mitmproxy用中間人的方式截取服務器發送來的js,修改js裏面函數的參值方式發送給服務器。相當於在browser和server之間做一層中間件的攔截。不過此方法要對js非常熟悉的人才好實施。但是效率高啊,網上教程也很多。
3. 修改webdriver
修改chromedriver中與webdriver相關的特徵,重新編譯chromedriver生成.exe,但是源碼找不着。。。。。。。退而求其次,Selenium執行cdp命令調用chrome瀏覽器的開發者工具,給window.navigator對象定義一個webdriver屬性,並且設置爲undefined,以繞過js的檢測。
webdriver = webdriver.Chrome()
webdriver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
另附上個人博客地址:
http://dazuili.cn/blog/29