如何用Python3 + Selenium自动点击reCAPTCHA v2复选框?
解决Python3 + Selenium点击reCAPTCHA复选框的问题
问题根源
你用的绝对XPATH太依赖页面固定结构,只要页面元素层级稍有变动就会失效;更关键的是reCAPTCHA复选框默认嵌套在独立的iframe中,直接在主文档里定位肯定找不到目标元素。
解决方案步骤
- 切换到reCAPTCHA的iframe:先定位包含reCAPTCHA的iframe容器,切换进去后才能操作内部元素
- 用稳定定位方式找复选框:放弃绝对XPATH,改用基于元素属性的相对定位规则
- 等待元素加载完成:用显式等待确保元素可点击后再执行点击操作,避免因加载延迟报错
完整代码示例
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化Chrome浏览器驱动 driver = webdriver.Chrome() driver.get("https://www.consularappointment.sg/ConsularAppointment") try: # 1. 等待reCAPTCHA iframe加载并切换进去 recaptcha_iframe = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*='recaptcha']")) ) driver.switch_to.frame(recaptcha_iframe) # 2. 等待复选框可点击后执行点击 recaptcha_checkbox = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, ".recaptcha-checkbox-checkmark")) ) recaptcha_checkbox.click() # 3. 操作完成后切回主文档(后续需操作页面其他元素时执行) driver.switch_to.default_content() except Exception as e: print(f"操作出错: {str(e)}") finally: # 根据需求选择是否关闭浏览器 # driver.quit() pass
额外说明
- 如果页面存在多个reCAPTCHA iframe,可调整iframe的定位条件(比如结合title属性筛选)
- reCAPTCHA自带反爬机制,频繁自动点击可能触发图片验证等挑战,这类场景纯Selenium无法自动完成,需借助第三方服务或手动处理
内容的提问来源于stack exchange,提问作者Sayargyi
相关产品推荐
相关产品推荐

