使用webdriver访问Chrome扩展出现ERR_BLOCKED_BY_CLIENT如何解决?
问题原因
Chrome出于安全限制,默认禁止Selenium启动的自动化浏览器实例访问chrome-extension://协议的页面,同时Selenium默认启动的是无本地用户配置的干净浏览器实例,不会加载你本地已安装的OneTab扩展,两者共同导致了ERR_BLOCKED_BY_CLIENT报错。
解决方案
按如下步骤修改配置即可解决:
- 配置Chrome启动参数,加载OneTab扩展并添加白名单
你需要先获取本地OneTab扩展的安装路径:在Chrome地址栏输入chrome://version,找到「个人资料路径」对应目录,进入该目录下的Extensions/chphlpgkkbolifaimnlloiipkdnihall文件夹,对应版本号的文件夹路径就是扩展路径。
修改后的代码示例:
import { Builder, until } from "selenium-webdriver"; import { Options } from "selenium-webdriver/chrome.js"; async function runScript() { const chromeOptions = new Options(); // 允许访问扩展类URL chromeOptions.addArguments("--extensions-on-chrome-urls"); // 将OneTab扩展ID加入访问白名单 chromeOptions.addArguments("--whitelisted-extension-id=chphlpgkkbolifaimnlloiipkdnihall"); // 替换为你本地实际的OneTab扩展路径 chromeOptions.addArguments("--load-extension=/你的扩展路径"); // 也可使用addExtensions加载crx文件:chromeOptions.addExtensions("./onetab.crx"); const browser = await new Builder() .forBrowser("chrome") .setChromeOptions(chromeOptions) .build(); try { await browser.get( "chrome-extension://chphlpgkkbolifaimnlloiipkdnihall/onetab.html" ); // 修正原代码的等待条件错误,替换为匹配OneTab页面标题 await browser.wait(until.titleContains("OneTab"), 5000); // 此处添加后续导出操作代码 } finally { await browser.quit(); } } runScript();
- 备选方案:使用本地Chrome远程调试模式
上述配置不生效时可以用此方案:
- 关闭所有Chrome进程后,命令行启动Chrome时添加
--remote-debugging-port=9222参数,启动后手动确认OneTab可以正常打开,再修改Selenium配置连接该调试实例:
const chromeOptions = new Options(); chromeOptions.debuggerAddress("127.0.0.1:9222"); // 后续Builder配置同上,不需要再配置扩展加载和白名单参数
这个方案使用你日常使用的Chrome配置,不会触发扩展访问限制。
内容的提问来源于stack exchange,提问作者Elf Sternberg
相关产品推荐
相关产品推荐

