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

如何使用Selenium网页自动化工具点击隐形reCAPTCHA按钮

问题核心原因

你观测到reCAPTCHA iframe内部无内容,是因为隐形reCAPTCHA的弹窗iframe仅在验证码被触发弹出时才会动态加载内部DOM节点,未触发状态下iframe默认是空的,无需纠结静态DOM下的节点缺失问题。

解决方案步骤

1. 等待弹窗触发后切换到对应iframe

不要提前切换iframe,等验证码弹窗弹出后,先定位弹窗专属的reCAPTCHA iframe,再切换进入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待reCAPTCHA弹窗iframe加载完成,适配隐形reCAPTCHA的动态加载逻辑
captcha_iframe = WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.XPATH, '//iframe[contains(@title,"reCAPTCHA") and contains(@src,"bframe")]'))
)
driver.switch_to.frame(captcha_iframe)

注:Selenium 4.0+已废弃find_element_by_xpath()写法,推荐使用上述find_element(By.XPATH, 路径)的规范写法

2. 定位并点击音频验证按钮

切换进入iframe后,再用显示等待定位音频按钮,避免元素未加载导致的定位失败:

audio_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//button[@id="recaptcha-audio-button"]'))
)
audio_button.click()

3. Headless Chrome适配配置

旧版headless模式特征明显,极易被reCAPTCHA识别为机器人,需要调整启动参数降低检测概率:

from selenium import webdriver

options = webdriver.ChromeOptions()
# 使用新版headless模式,特征与普通可视模式几乎一致
options.add_argument("--headless=new")
# 移除自动化控制标记
options.add_argument("--disable-blink-features=AutomationControlled")
# 隐藏webdriver特征
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

driver = webdriver.Chrome(options=options)
# 执行js覆盖navigator.webdriver标记
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

4. 降低验证码触发概率的额外优化

  • 启动Chrome时加载本地已有正常使用痕迹的用户配置文件,不要每次都用全新无痕窗口
  • 表单填写时每个输入框之间添加1-3秒的随机等待,不要一次性批量填充所有内容
  • 点击提交按钮前先随机移动鼠标到按钮区域停留0.5-2秒再执行点击操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:54:00