如何点击invisible-recaptcha v2确认按钮?已通过JS回调函数解决
解决reCAPTCHA验证后的提交问题
你已经通过python-capmonster获取到验证响应并填入g-recaptcha-response文本域,但reCAPTCHA不会自动识别该值,需要手动触发验证流程,无需点击iframe内的验证/跳过按钮,具体解决方案如下:
核心逻辑说明
reCAPTCHA v2的验证机制是:填入有效响应值后,需触发其内部的验证回调,或让页面感知到响应已填入,才能完成验证并解锁后续的结账按钮。
具体实现代码
- 触发文本域变更事件
仅填入值无法让reCAPTCHA感知到内容变化,需通过JavaScript触发input事件:
# 原有填入响应的代码 driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "%s"' % response) # 触发文本域变更事件 driver.execute_script(''' const textarea = document.getElementById("g-recaptcha-response"); const inputEvent = new Event('input', { bubbles: true }); textarea.dispatchEvent(inputEvent); ''')
- 调用reCAPTCHA的验证回调函数
每个reCAPTCHA组件都绑定了回调函数,可通过data-callback属性获取并调用:
# 获取当前reCAPTCHA组件的回调函数名 callback_func = driver.execute_script(''' const recaptchaWidget = document.querySelector('.g-recaptcha'); return recaptchaWidget.getAttribute('data-callback'); ''') # 调用回调函数完成验证 if callback_func: driver.execute_script(f'{callback_func}("{response}");')
- 定位并点击页面结账按钮
完成reCAPTCHA验证后,页面结账按钮会从禁用变为可用,直接定位点击即可:
# 需根据目标页面实际元素调整选择器,以下为示例 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待结账按钮可点击 checkout_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-testid="checkout-button"]')) ) checkout_btn.click()
注意事项
- 不要操作iframe内的reCAPTCHA按钮,你已通过capmonster完成人机验证,触发回调即可完成流程。
- 若页面存在多个reCAPTCHA组件,需确保定位到当前触发验证的那个widget。
- 若上述方法无效,可尝试调用
grecaptcha.render重新渲染组件并传入响应值,但这种场景极少出现。
内容的提问来源于stack exchange,提问作者Glisten STAR
相关产品推荐
相关产品推荐

