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

使用Selenium插入付费reCaptcha Token后报必填项空值错误的求助

解决reCaptcha Token填入后仍提示“必填项不能为空”的问题

我从付费服务获取了reCaptcha的Token,尝试将其填入reCaptcha表单以完成登录流程,执行了以下Selenium代码:

self.browser.get('https://visa.vfsglobal.com/rus/en/fra/login')

self.browser.find_element(By.ID, 'mat-input-0').send_keys('login')
self.browser.find_element(By.ID, 'mat-input-1').send_keys('password')

self.browser.execute_script("document.getElementById('g-recaptcha-response').style.removeProperty('display');")
self.browser.execute_script(f"document.getElementById('g-recaptcha-response').innerHTML = '{code}'")
self.browser.execute_script('var element=document.getElementById("g-recaptcha-response"); element.style.display="none";')

submit_btn = self.browser.find_element(By.XPATH, "//button[contains(@class, 'mat-focus-indicator')]")
submit_btn.click()

但提交后收到“必填项不能为空”(Mandatory field cannot be left blank)错误。我还尝试了以下代码:

recaptcha_response_element = self.browser.find_element(By.XPATH, '//*[@id="g-recaptcha-response"]')
self.browser.execute_script(f'arguments[0].value = "{code}";', recaptcha_response_element)

结果仍相同,请问该如何解决此问题?


解决方法

  • 触发元素的输入/变更事件
    仅填充g-recaptcha-response的value不足以让页面的表单校验逻辑识别到内容已填写,需要手动触发元素的input或change事件,告诉页面该字段已更新。修改后的代码如下:

    recaptcha_response_element = self.browser.find_element(By.ID, 'g-recaptcha-response')
    # 填充Token
    self.browser.execute_script(f'arguments[0].value = "{code}";', recaptcha_response_element)
    # 触发input事件(带冒泡,确保页面监听器能捕获)
    self.browser.execute_script('arguments[0].dispatchEvent(new Event("input", { bubbles: true }));', recaptcha_response_element)
    # 可选:触发change事件,适配部分页面的校验逻辑
    self.browser.execute_script('arguments[0].dispatchEvent(new Event("change", { bubbles: true }));', recaptcha_response_element)
    
  • 检查是否存在关联隐藏字段
    部分页面会搭配reCaptcha设置额外的校验字段(比如部分使用类reCaptcha服务的页面会有h-captcha-response或自定义校验参数)。打开浏览器开发者工具,查看表单提交时的Form Data或请求参数,确认是否有其他需要同步填充的字段,将对应的Token也填入这些字段中。

  • 确保Token有效且未过期
    reCaptcha Token的有效期通常在2分钟以内,要保证填入的Token是刚从付费服务获取的新鲜值,避免因Token过期导致校验失败。

  • 模拟正常用户交互流程
    不要直接操作隐藏的g-recaptcha-response元素,先等待页面上的reCaptcha组件完全加载(比如带有“我不是机器人”标识的按钮),先点击触发组件初始化,再进行Token填充操作。有些页面会在用户触发reCaptcha后才生成有效的g-recaptcha-response元素,直接提前操作可能导致字段未被页面识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:15:36