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

Selenium Python的driver.page_source返回内容缺失<!DOCTYPE html>问题咨询

这是Selenium的预期行为。

原因说明

driver.page_source返回的是浏览器完成DOM解析后重新序列化生成的字符串,并非服务器返回的原始HTML源码:

  • DOCTYPE属于文档类型节点,火狐浏览器的Gecko驱动默认序列化DOM时不会将DOCTYPE节点包含到输出结果中
  • 原始HTML中的换行、缩进属于无意义空白字符,不影响DOM渲染,序列化过程中会被浏览器优化合并或删除,因此出现格式丢失属于正常情况

正确处理方案

方案1:校验原始HTML合规性用原始响应(推荐)

如果你的校验目标是确认服务端输出的HTML符合规范,直接通过HTTP请求拿原始响应内容即可,和你现有单元测试的校验逻辑一致,拿到的内容完全贴合服务端模板输出:

import requests

# 从测试服务拿原始HTML
resp = requests.get(f"{self.live_server_url}/netlog/")
raw_html = resp.text
# 直接将raw_html传给html5lib校验即可

方案2:必须在Selenium流程中获取完整HTML

如果你的校验逻辑必须和Selenium的页面操作绑定,可以通过执行JS主动拼接DOCTYPE和DOM内容,避免手动硬编码DOCTYPE出错:

full_html = self.driver.execute_script("""
// 从DOM中读取DOCTYPE信息拼接
const dt = document.doctype;
let dtStr = '';
if (dt) {
    dtStr = `<!DOCTYPE ${dt.name}`;
    if (dt.publicId) dtStr += ` PUBLIC "${dt.publicId}"`;
    if (dt.systemId) dtStr += ` "${dt.systemId}"`;
    dtStr += '>\n';
}
// 拼接完整HTML内容
return dtStr + document.documentElement.outerHTML;
""")

注:该方案拿到的HTML仍然是DOM序列化后的结果,不会恢复原始缩进换行,仅能解决DOCTYPE丢失的问题


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:45:04