python-3.x - 如何使 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 实例中登录谷歌帐户通常会更改演示的结果,但仍不能完全防止分数失败
解决方案
要将您的recaptcha-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": [] }
控制台快照:
推荐阅读
- android-emulator - Android 模拟器总是崩溃
- sql - 如何从postgres的间隔中提取年份
- java - 调试日志记录不适用于特定处理程序
- reactjs - React Hook List 大小 - React Native
- angular - Angular 2 三分量数据传输
- hp-uft - 从 UFT 中的日历中选择日期时出现未指定的错误
- node.js - 带有 ReactJS + React-Router-Dom 的 NodeJS 工作不正确
- php - 如何在php中显示评论通知
- java - 观看奖励视频后,如何在 1 天内停止在 android 应用中显示所有广告?
- java - 从字节数组中识别 ProtoBuf 类