selenium被某些網頁檢測不允許正常訪問、登錄等,解決辦法
網站通過什麼方式檢測
function b() {
return "$cdc_asdjflasutopfhvcZLmcfl_"in u || d.webdriver
}
- 通過上方的js網站可以檢測chromedriver.exe的特徵碼:
$cdc_asdjflasutopfhvcZLmcfl_
- js還會檢測window.navigator.webdriver這個屬性,如果用selenium調用瀏覽器這個值會是true,手動打開瀏覽器這個值是false;可以通過瀏覽器的console輸入console.log(window.navigator.webdriver)查看該屬性的值
$cdc_asdjflasutopfhvcZLmcfl_ 特徵碼解決辦法
有人說在電腦上使用notepad++打開chromedriver.exe文件搜索修改$cdc_asdjflasutopfhvcZLmcfl_這個值可以解決。不過我用notepad++打開後可能是因為編碼問題,我並沒有找到這個值。所以我上傳到伺服器上用vim編輯器做的修改,如下:
- 上傳chromedriver.exe文件到伺服器上
- 使用vim編輯器打開chromedriver.exe文件,並查找$cdc_asdjflasutopfhvcZLmcfl_這個值進行修改
需要注意的是:cdc_asdjflasutopfhvcZLmcfl_這個值是多少個字元,那麼你修改完之後還需要是多少個字元。
- 修改完之後:wq保存病退出,然後把這個文件重新下載到電腦上就行了
webdriver值為true的解決辦法
方案1:設置webdriver的值為false
if __name__ == '__main__':
service = Service('chromedriver.exe')
option = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
option.add_argument('sec-fetch-site=same-site')
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
option.add_experimental_option("excludeSwitches", ['enable-automation'])
option.add_argument("--disable-blink-features")
option.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(service=service,options=option)
使用option自定義配置chrome瀏覽器修改webdriver的值為false
方案2:設置webdriver的值為undefined
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})