使用 selenium python 为 recaptcha v2 注入从 anticaptcha 接收到的令牌

Injecting token received from anticaptcha for recaptcha v2 using selenium python

我正在使用 anticaptcha 来帮助绕过我正在抓取的网页上的验证码。

我已经设法解决了这个解决方案的 api 部分。这很简单。 我苦苦挣扎的部分是将从反验证码接收到的令牌注入网页。

没有找到太多这方面的资源。我正在使用 SeleniumPython 以及 anticaptchaofficial 模块。

我正在执行的脚本确实更改了 ID 为 g-recaptcha-responsetextarea 的 innerHtml,但该网页没有执行任何操作,复选框也没有加载微调器或得到验证。 这是我的代码:

from anticaptchaofficial.recaptchav2proxyless import recaptchaV2Proxyless

from selenium import webdriver

import os
import time

driver = webdriver.Chrome(os.path.normpath(os.getcwd()+"\chromedriver.exe"))
driver.get("https://www.google.com/recaptcha/api2/demo")
time.sleep(1)

data_sitekey = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')

solver = recaptchaV2Proxyless()
solver.set_verbose(1)
solver.set_key("<--my-key-->")
solver.set_website_url("https://www.google.com/recaptcha/api2/demo")
solver.set_website_key(data_sitekey)

g_response = solver.solve_and_return_solution()

driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "{}";'.format(g_response)) # target textarea that is supposed to be injected with the token, I found upon some research
driver.execute_script("onSuccess('{}')".format(g_response))
time.sleep(1)

结果我假设 recaptcha 框架会显示关于注入令牌(或其他一些等效操作)的可见反馈,但结果只是一行:

driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "{}";'.format(g_response))

更新textarea的innerHtml就够了。所以你基本上需要继续你的任务,即:点击提交,如果它是表单上的重新验证,或者如果它只是随机触发则重新加载页面

from anticaptchaofficial.recaptchav2proxyless import recaptchaV2Proxyless

from selenium import webdriver

import os
import time

driver = webdriver.Chrome(os.path.normpath(os.getcwd()+"\chromedriver.exe"))
driver.get("https://www.google.com/recaptcha/api2/demo")
time.sleep(1)

data_sitekey = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')

solver = recaptchaV2Proxyless()
solver.set_verbose(1)
solver.set_key("<--my-key-->")
solver.set_website_url("https://www.google.com/recaptcha/api2/demo")
solver.set_website_key(data_sitekey)

g_response = solver.solve_and_return_solution()

driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "{}";'.format(g_response)) 

time.sleep(1)

# whatever the next step is. Could be clicking on a submit button
driver.refresh()