如何通过Selenium在Microsoft Edge中进入沉浸式阅读器模式
在Docker化的Edge中通过Selenium开启沉浸式阅读器并保存源码
核心解决方案:使用Edge DevTools Protocol (CDP)
直接用快捷键F9在Docker环境中容易失效,因为缺少窗口焦点。更可靠的方式是调用Edge内置的CDP命令来触发沉浸式阅读器:
连接到CDP并启用阅读器
Edge的沉浸式阅读器有对应的CDP命令immersiveReader.enable,可以通过Selenium的sendDevToolsCommand方法调用。等待阅读器加载完成
开启后需要等待阅读器的DOM元素加载,比如等待阅读器的容器出现。提取源码并保存到本地
获取阅读器区域的HTML内容,用Node.js的文件系统模块写入本地文件。
完整Node.js代码示例
const { Builder, By, until } = require('selenium-webdriver'); const edge = require('selenium-webdriver/edge'); const fs = require('fs').promises; async function run() { // 配置Docker Edge的连接选项 const options = new edge.Options() .addArguments('--headless=new') // 无头模式适配Docker环境 .addArguments('--no-sandbox') .addArguments('--disable-dev-shm-usage'); const driver = await new Builder() .forBrowser('MicrosoftEdge') .setEdgeOptions(options) .usingServer('http://<你的DockerEdge地址>:4444/wd/hub') // 替换为实际Docker Edge服务地址 .build(); try { // 加载目标页面 await driver.get('https://支持沉浸式阅读器的页面地址'); // 调用CDP命令开启沉浸式阅读器 await driver.sendDevToolsCommand('immersiveReader.enable', {}); // 等待阅读器容器加载(根据实际页面调整选择器) const readerContainer = await driver.wait( until.elementLocated(By.css('#immersive-reader-container')), // 替换为页面实际的阅读器容器选择器 10000 ); await driver.wait(until.elementIsVisible(readerContainer), 5000); // 获取阅读器区域的HTML源码 const readerSource = await readerContainer.getAttribute('innerHTML'); // 保存到本地文件 await fs.writeFile('./immersive-reader-source.html', readerSource, 'utf8'); console.log('沉浸式阅读器源码已保存'); } finally { await driver.quit(); } } run().catch(err => console.error(err));
关键说明
- CDP命令的可靠性:
immersiveReader.enable是Edge官方支持的CDP命令,无需依赖窗口焦点,完美适配Docker无头环境。 - 选择器调整:不同页面的沉浸式阅读器容器选择器可能不同,需要用浏览器开发者工具查看实际DOM结构,替换代码中的选择器。
- Docker配置:确保你的Edge Docker容器已开启远程调试,并且Selenium服务地址配置正确。
内容的提问来源于stack exchange,提问作者G-R
相关产品推荐
相关产品推荐

