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
相关产品推荐
相关产品推荐

