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

Selenium Python完成Google Recaptcha后如何获取原网页源码及元素?

问题解决:手动验证reCAPTCHA后Selenium无法定位原页面元素

核心原因

Google reCAPTCHA是嵌入在独立iframe中的,手动完成验证后,Selenium驱动的焦点仍停留在这个iframe上下文里,导致page_source返回的是iframe的源码,自然无法定位原页面的表单和提交按钮。

解决方案

在手动完成reCAPTCHA验证后,将驱动焦点切回主页面上下文,再进行元素定位:

修改后的关键代码片段

# 手动完成reCAPTCHA验证后,添加这行代码切回主页面
p_driver.switch_to.default_content()

# 等待主页面元素加载(替换原有的time.sleep,更可靠)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待表单元素出现,超时10秒
WebDriverWait(p_driver, 10).until(
    EC.presence_of_element_located(("xpath", "//form[@name='form']"))
)

# 后续提交表单的代码不变
print(p_driver.page_source)
form_element = findOneByXPath(p_driver, "//form[@name='form']", 2)
if form_element is not None:
    form_element.submit()
else:
    submit_element = findOneByXPath(p_driver, "//input[@type='submit']", 2)
    if submit_element is not None:
        ScrollToElement(p_driver, submit_element)
        JavascriptClick(p_driver, submit_element)
    else:
        submit_element = findOneByXPath(p_driver, "//input[@name='submit']", 2)
        if submit_element is not None:
            ScrollToElement(p_driver, submit_element)
            JavascriptClick(p_driver, submit_element)

关键说明

  • p_driver.switch_to.default_content():强制驱动离开所有嵌套的iframe,回到原页面的顶级上下文,此时page_source会恢复为原页面的源码。
  • 用WebDriverWait替代time.sleep:更可靠地等待元素加载,避免因网络或页面渲染延迟导致的定位失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:25:24