如何识别 ReCaptcha V2 的 32 位数据站点密钥以使用 Selenium 和 Python 请求以编程方式获取有效响应?

Posted

技术标签:

【中文标题】如何识别 ReCaptcha V2 的 32 位数据站点密钥以使用 Selenium 和 Python 请求以编程方式获取有效响应?【英文标题】:How to identify the 32 bit data-sitekey of ReCaptcha V2 to obtain a valid response programmatically using Selenium and Python Requests? 【发布时间】:2020-05-25 19:01:29 【问题描述】:

验证码和 Python 请求非常新。 captcha documentation 表示复制data-sitekey 参数的值。

这是我的尝试,使用 Selenium 打开网址并使用 Python requests 获得响应。

mainurl = 'https://imagetyperz.xyz/automation/recaptcha-v2.html'
driver.get(mainurl)
data_sitekey_class = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, "g-recaptcha"))).get_attribute("data-sitekey")
print(data_sitekey_class)
src_css_selector = driver.find_element_by_css_selector("iframe[role='presentation']").get_attribute("src")
print(src_css_selector)
keygoogle = src_css_selector[52:92]
print('Site Key = ', keygoogle)
data_post = 'key': data_sitekey_class, 'method': 'userrecaptcha', 'googlekey': keygoogle, "pageurl": mainurl
response = requests.post(url = 'https://2captcha.com/in.php', data = data_post )
print(response)
print(response.text)

我收到200 作为回复:

6LdXeIYUAAAAAFmFKJ6Cl3zo4epRZ0LDdOrYsvRY
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LdXeIYUAAAAAFmFKJ6Cl3zo4epRZ0LDdOrYsvRY&co=aHR0cHM6Ly9pbWFnZXR5cGVyei54eXo6NDQz&hl=en&v=vJuUWXolyYJx1oqUVmpPuryQ&size=normal&cb=r14cgu7t25ul
Site Key =  6LdXeIYUAAAAAFmFKJ6Cl3zo4epRZ0LDdOrYsvRY
<Response [200]>
ERROR_WRONG_USER_KEY

这是由于:

ERROR_WRONG_USER_KEY

此外,Error 部分提到:

Error code: ERROR_WRONG_USER_KEY
Description: You've provided key parameter value in incorrect format, it should contain 32 symbols.
Action: Stop sending requests. Check your API key.

最后,Solving Captchas 部分提到:

从您的帐户设置页面获取您的 API 密钥。每个用户都有一个唯一的身份验证令牌,我们称之为 API 密钥。这是一个 32 个字符的字符串,如下所示:

1abc234de56fab7c89012d34e56fa7b8

我看到的data-sitekey 是:

6LdXeIYUAAAAAFmFKJ6Cl3zo4epRZ0LDdOrYsvRY

这是41位。

我哪里错了?

【问题讨论】:

不相关 - 我有一个关于硒的问题。希望你能帮忙。谢谢。 ***.com/questions/60678312/… 【参考方案1】:

data-sitekey 通过 41 个字符的字符串表示就可以了。发生错误ERROR_WRONG_USER_KEY 是因为我一开始就没有准备好有效的API key。即使您的账户余额,您也可以成功获得&lt;Response [200]&gt;,文字为ERROR_ZERO_BALANCE,如下:

代码块:

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
import requests

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')
mainurl = 'https://imagetyperz.xyz/automation/recaptcha-v2.html'
driver.get(mainurl)
data_sitekey = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, "g-recaptcha"))).get_attribute("data-sitekey")
print(data_sitekey)
api_key = '--------------------------------'
data_post = 'key': api_key, 'method': 'userrecaptcha', 'googlekey': data_sitekey, "pageurl": mainurl
response = requests.post(url = 'https://2captcha.com/in.php', data = data_post )
print(response)
print(response.text)

控制台输出:

6LdXeIYUAAAAAFmFKJ6Cl3zo4epRZ0LDdOrYsvRY
<Response [200]>
ERROR_ZERO_BALANCE

【讨论】:

以上是关于如何识别 ReCaptcha V2 的 32 位数据站点密钥以使用 Selenium 和 Python 请求以编程方式获取有效响应?的主要内容,如果未能解决你的问题,请参考以下文章

在同一页面上验证多个 recaptcha (V2)

为 Chrome 77 上的 google recaptcha v2 警告尝试 SameSite 属性修复似乎对我不起作用?

更改新的 Google Recaptcha (v2) 宽度

javascript Google Recaptcha v2表单验证

css 将reCaptcha V2集成到网站中

ReCaptcha v2 客户端事件