Python Selenium无法读取JS渲染页面内容问题排查
问题根因
- 核心问题是你当前使用的旧版Chrome无头模式被惠普打印机内置Web系统的环境检测逻辑拦截了。旧版
--headless模式的浏览器User-Agent会携带HeadlessChrome专属标识,且存在多处和正常有界面Chrome不一致的特征,设备端的JS脚本检测到非合规浏览器环境后,会直接终止后续页面渲染逻辑,只返回“请启用JavaScript”的兜底提示页。 - 这种场景下页面本身的业务渲染JS根本没有执行,所以不管是调用
driver.page_source还是通过execute_script读取DOM节点内容,拿到的都只会是初始的兜底提示内容,和你写的取内容逻辑没有关系。 - 你当前配置里的禁用图片加载、忽略证书错误、窗口大小、页面加载策略这些参数都不会导致这个问题,可以保留。
验证方式
去掉--headless启动参数,用有界面模式运行相同代码,如果能正常加载出打印机页面内容,即可确认是无头模式被检测拦截导致的问题。
修复方案
调整Chrome启动参数即可,其余代码逻辑无需大改:
- 替换旧无头模式参数为新版Chrome无头模式,新版无头模式完全对齐正常Chrome的运行特征,不会携带无头标识,不会被常规环境检测识别:
# 注释掉旧的参数 # chrome_options.add_argument("--headless") # 替换为新版无头参数 chrome_options.add_argument("--headless=new") - 若替换参数后仍存在拦截,可手动覆盖浏览器UA,彻底移除无头相关标识,示例UA可根据你本地Chrome的实际版本调整:
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36") - 修复后直接使用
driver.page_source即可获取完整渲染后的页面源码,无需额外通过execute_script读取innerHTML。如果你的wait_for_page是固定时长等待,建议替换为Selenium显式等待,待页面上的打印机专属元素(比如设备名称、状态标识节点)加载完成后再读取源码,避免页面未加载完成就取内容的时序问题。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

