首页 > 解决方案 > 如何使 selenium chromedriver 在 recaptcha v3 演示中始终获得高分

问题描述

所以我最近开始为一些个​​人项目测试 selenium,我遇到的一个问题是由于 recaptcha v3 测试而被禁止访问某些网站。我做了更多的研究,找到了recaptcha v3 demo,做了一些测试,最终写了这个:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36");

driver = webdriver.Chrome(options=options, executable_path=ChromeDriverManager().install())
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})

driver.get("https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php")
WebDriverWait(driver, 10).until(EC.title_contains("Index"))

我查看了各种堆栈溢出问题,包括以下内容,

Selenium webdriver:修改 navigator.webdriver 标志以防止硒检测

网站可以检测到您何时将硒与 chromedriver 一起使用?

recaptcha 3 如何知道我正在使用 selenium/chromedriver?

和更多

虽然添加的参数确实有助于提高 recaptcha v3 分数,但它仍然非常不一致。大约一半的时间我获得了 0.7 的及格分数,而另一半我收到了 0.1 的不及格分数。

请帮助我提高我的recaptcha分数并始终通过

编辑 1: 在 chrome 实例中登录谷歌帐户通常会更改演示的结果,但仍不能完全防止分数失败

标签: python-3.xseleniumselenium-webdriverselenium-chromedriverrecaptcha-v3

解决方案


要将您的分数从.7更高级别增加,即您可以按如下方式.9轮换execute_cdp_cmd()

driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browserClientA"}})

如果有必要,您可以添加多个,如下所示:

driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browserClientA"}})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browserClientB"}})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browserClientC"}})

解决方案

因此,您的工作解决方案将是:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
      "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    driver.execute_cdp_cmd("Network.enable", {})
    driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser1"}})
    driver.get("https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php")
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "li.step3 pre.response"))).get_attribute("innerHTML"))
    
  • 控制台输出:

    DevTools listening on ws://127.0.0.1:53748/devtools/browser/eac086e8-f1c0-42d3-8ef8-d132f4b4c82b
    {
      "success": true,
      "hostname": "recaptcha-demo.appspot.com",
      "challenge_ts": "2020-01-20T22:31:32Z",
      "apk_package_name": null,
      "score": 0.9,
      "action": "examples/v3scores",
      "error-codes": []
    }
    
  • 控制台快照:

recaptcha3_score


推荐阅读