如何用Python提交g-recaptcha-response以绕过reCAPTCHA完成网站查询任务
如何用Python提交g-recaptcha-response以绕过reCAPTCHA完成网站查询任务
看起来你已经搞定了最麻烦的部分——成功调用API拿到了reCAPTCHA的响应结果,但卡在把这个结果提交给网站这一步了对吧?我来帮你梳理下问题所在,调整代码试试:
你代码里的几个关键小坑
- 直接修改innerHTML不对:
g-recaptcha-response是个隐藏的textarea元素,应该设置它的value属性,而不是innerHTML才能被系统识别。 - 没触发reCAPTCHA的验证回调:Google的reCAPTCHA不会自动感知你手动填入的响应,必须触发它的内部回调函数,才能确认响应有效并解锁提交按钮。
- iframe切换时机错了:你切换到reCAPTCHA的iframe后找提交按钮,但实际上网站的提交按钮是在主页面里,而且得等reCAPTCHA验证通过后才会变成可点击状态。
修改后的代码示例
咱们一步步调整代码,重点处理响应提交和验证触发:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 假设你已经导入了recaptcha相关库并初始化了navegador实例 solver = recaptchaV2Proxyless() solver.set_verbose(1) solver.set_key('xxxx') solver.set_website_url(link) solver.set_website_key(site_key) resposta = solver.solve_and_return_solution() if resposta != 0: print(f"拿到的reCAPTCHA响应: {resposta}") # 1. 确保回到主页面(如果之前切换过iframe的话) navegador.switch_to.default_content() # 2. 先让隐藏的g-recaptcha-response元素可见,再设置value navegador.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';") response_element = navegador.find_element(By.ID, 'g-recaptcha-response') navegador.execute_script(f"arguments[0].value = '{resposta}';", response_element) # 3. 触发reCAPTCHA的验证回调,通知系统响应已填入 navegador.execute_script("grecaptcha.submit();") # 4. 等待网站的提交按钮变为可点击,再点击提交 # 这里替换成你网站实际的提交按钮选择器(比如ID/类名) submit_button = WebDriverWait(navegador, 10).until( EC.element_to_be_clickable((By.ID, 'submit')) ) submit_button.click() else: print(f"reCAPTCHA求解失败: {solver.err_string}")
额外提醒
- 反爬检测规避:很多网站会识别Selenium的特征(比如ChromeDriver标识),如果还是失败,建议试试
undetected-chromedriver库,它能绕过大部分基础反爬。 - 模拟真实用户行为:可以加入一些小操作,比如滚动页面、等待几秒、点击页面空白区域,降低被判定为机器人的概率。
- 确认元素选择器:打开浏览器开发者工具,仔细核对网站提交按钮的真实ID或类名,别误选了reCAPTCHA iframe里的按钮。
备注:内容来源于stack exchange,提问作者Andre Alencar
相关产品推荐
相关产品推荐

