selenium被某些網頁檢測不允許正常訪問、登錄等,解決辦法

網站通過什麼方式檢測

function b() {
            return "$cdc_asdjflasutopfhvcZLmcfl_"in u || d.webdriver
        }
  1. 通過上方的js網站可以檢測chromedriver.exe的特徵碼:$cdc_asdjflasutopfhvcZLmcfl_
  2. js還會檢測window.navigator.webdriver這個屬性,如果用selenium調用瀏覽器這個值會是true,手動打開瀏覽器這個值是false;可以通過瀏覽器的console輸入console.log(window.navigator.webdriver)查看該屬性的值

$cdc_asdjflasutopfhvcZLmcfl_ 特徵碼解決辦法

有人說在電腦上使用notepad++打開chromedriver.exe文件搜索修改$cdc_asdjflasutopfhvcZLmcfl_這個值可以解決。不過我用notepad++打開後可能是因為編碼問題,我並沒有找到這個值。所以我上傳到伺服器上用vim編輯器做的修改,如下:

  1. 上傳chromedriver.exe文件到伺服器上
    image
  2. 使用vim編輯器打開chromedriver.exe文件,並查找$cdc_asdjflasutopfhvcZLmcfl_這個值進行修改
    image

    需要注意的是:cdc_asdjflasutopfhvcZLmcfl_這個值是多少個字元,那麼你修改完之後還需要是多少個字元。

  3. 修改完之後: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
    })
  """
})
Tags: