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

Python Selenium page_source页面完全加载后仍未包含全部HTML内容如何解决

问题原因与解决方法

你遇到的问题由两个典型错误导致,按照以下步骤调整即可解决:

1. 修正元素定位规则

By.CLASS_NAME仅支持传入单个类名,你传入的fa fa-download fa-fw是三个并列类名,直接使用会直接抛出定位异常,自然无法等到元素加载完成。
正确的定位方式推荐用CSS选择器,精准度更高:

  • 定位下载图标:By.CSS_SELECTOR, '.fa.fa-download.fa-fw'
  • 直接定位你最终要点击的csv按钮(更高效):By.CSS_SELECTOR, 'a.ep-download[data-download-csv]'

2. 处理iframe嵌套问题

你在浏览器检查元素能找到目标元素、但page_source里找不到的核心原因是:页面的报告内容渲染在内嵌的iframe标签中,Selenium默认只会获取外层主文档的DOM结构,不会自动读取iframe内部的内容,需要手动切换到对应iframe后再操作。
操作流程如下:

  • 先等待iframe加载完成并切换进入iframe
  • 切换完成后再等待目标元素加载,此时获取的page_source就是iframe内部的完整DOM,也可以正常定位点击下载按钮
  • 所有操作完成后如果需要回到外层主文档,执行driver.switch_to.default_content()即可

修正后的完整代码

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

driver = webdriver.Chrome()
driver.get('http://research-pub.gene.com/BrainMyeloidLandscape/BrainMyeloidLandscape2/#Human-gene/Human-gene/23550/geneReport.html')

wait = WebDriverWait(driver, 15)

# 等待iframe加载完成并切换进入
wait.until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, 'iframe')))

# 等待csv下载按钮可点击后执行点击
download_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.ep-download[data-download-csv]')))
download_btn.click()

# 此时打印的page_source已经包含iframe内的全部HTML内容
print(driver.page_source)

# 操作完成后切回主页面
driver.switch_to.default_content()

额外注意事项

  • 如果页面存在多个iframe,需要根据iframe的id、name等属性精准定位要切换的目标,不要直接用TAG_NAME匹配避免切错
  • 如果切换iframe后还是找不到元素,再检查是否存在Shadow DOM结构,需要通过shadow_root属性逐层读取内部元素即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:36:03