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

为何Selenium调用page_source获取的页面源码缺少浏览器可见元素?

Selenium 获取 page_source 缺失元素的原因排查

常见原因

  • 异步渲染未完成:大部分现代网站采用前后端分离架构,初始HTML仅包含页面骨架,完整DOM需要等待JS执行、异步接口请求返回数据后才会渲染生成。调用webdriver.get(url)后直接调用webdriver.page_source,此时页面异步渲染逻辑还未执行完成,自然获取不到后续渲染的元素。
    排查方法:可以先加几秒强制等待验证,如果等待后能拿到元素,就可以替换为WebDriverWait显式等待,指定等待目标元素加载完成后再获取源码,避免无意义的等待时间。
  • 元素位于iframe/frame嵌套文档中:浏览器F12检查元素时会默认穿透iframe展示内容,但webdriver的操作上下文默认停留在顶层文档,未切入对应iframe时,获取的page_source仅包含顶层文档内容,不会包含iframe内的元素。
    排查方法:检查缺失的元素上级是否有<iframe>标签,如果有,先调用webdriver.switch_to.frame()切入对应iframe后再获取源码即可。
  • 反爬虫防护机制拦截:部分站点会检测Selenium的特征指纹,包括navigator.webdriver属性、无头浏览器标识、自动化操作的行为特征等,检测到爬虫访问时,会返回不完整的页面内容、验证页或者空白页。
    排查方法:直接打印当前获取的page_source,查看是否包含验证提示、访问拦截相关的内容,如果存在即可确定是反爬拦截,需要对Selenium的特征进行抹除,或者使用特征屏蔽的驱动工具绕过。
  • 元素需要触发交互才会生成:部分DOM元素是交互后才会动态插入的,比如hover触发的下拉菜单、点击触发的弹窗、滚动才加载的列表内容等,未执行对应交互操作时,这些元素默认不会出现在DOM中,自然无法从page_source中获取。

总结

该现象不一定是反爬机制导致的,优先按照异步渲染、iframe嵌套的顺序排查,排除后再确认是否触发了反爬拦截即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:42:02