使用 selenium python 为 recaptcha v2 注入从 anticaptcha 接收到的令牌
Injecting token received from anticaptcha for recaptcha v2 using selenium python
我正在使用 anticaptcha 来帮助绕过我正在抓取的网页上的验证码。
我已经设法解决了这个解决方案的 api 部分。这很简单。
我苦苦挣扎的部分是将从反验证码接收到的令牌注入网页。
没有找到太多这方面的资源。我正在使用 Selenium
和 Python
以及 anticaptchaofficial
模块。
我正在执行的脚本确实更改了 ID 为 g-recaptcha-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)) # 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()
我正在使用 anticaptcha 来帮助绕过我正在抓取的网页上的验证码。
我已经设法解决了这个解决方案的 api 部分。这很简单。 我苦苦挣扎的部分是将从反验证码接收到的令牌注入网页。
没有找到太多这方面的资源。我正在使用 Selenium
和 Python
以及 anticaptchaofficial
模块。
我正在执行的脚本确实更改了 ID 为 g-recaptcha-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)) # 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()