You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python+Selenium调用2Captcha解决reCAPTCHA v2时提交不生效问题排查

问题排查与修复方案

你在2captcha官方demo站点可以验证成功,是因为demo站点没有添加额外的表单校验和反爬策略,容错率更高,所以不规范的写法刚好可以生效。目标站点校验逻辑更严格,主要问题出在验证码赋值、提交逻辑的写法错误:

核心问题点

  • 赋值方式错误:<textarea>元素的实际内容存储在value属性中,你使用innerHTML赋值的方式仅在少数宽松场景下生效,多数站点不会识别该修改
  • 提交逻辑错误:你直接调用验证码输入框的submit()方法,该元素并非表单提交入口,无法携带其他表单参数,也无法触发站点绑定的提交校验逻辑
  • 未触发验证回调:大部分集成reCAPTCHA v2的站点会监听验证码完成事件,仅填充输入框值不会触发对应回调,站点会判定你未完成验证
  • 暴露反爬特征:你将原本隐藏的验证码输入框改为可见状态,部分站点的反爬策略会检测到该异常,直接判定验证无效

修复代码

替换原有验证码填充、提交部分的代码即可:

driver.execute_script("""
  const captchaEle = document.getElementById("g-recaptcha-response");
  // 保持元素隐藏状态,避免触发反爬
  captchaEle.style.display = "none";
  // 用value属性赋值,符合文本框的标准操作逻辑
  captchaEle.value = arguments[0];
  // 触发change事件,通知站点验证码已更新
  captchaEle.dispatchEvent(new Event('change', {bubbles: true}));
""", result['code'])

time.sleep(2)

# 找到页面实际的提交按钮,点击提交,不要调用验证码输入框的submit方法
# 请将下方xpath替换为你目标页面提交按钮的实际选择器
submitBtn = driver.find_element_by_xpath('//*[@id="postSubmitBtn"]')
submitBtn.click()

可选补充操作

如果修复后仍然验证失败,可以先查看目标页面中g-recaptcha元素的data-callback属性值,获取站点预设的验证完成回调函数名,填充验证码后主动调用该回调即可,示例:

# 假设data-callback属性值为onCaptchaSuccess
driver.execute_script("window.onCaptchaSuccess()")

内容的提问来源于stack exchange,提问作者squidrat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 08:15:04