Node.js ESM下如何导入selenium-webdriver/chrome配置Chrome选项
问题背景
在启用ES模块的Node.js项目中使用Selenium,初始调用代码如下:
import {Builder, Browser, By, Key, until} from "selenium-webdriver"; let driver = await new Builder().forBrowser(Browser.CHROME).build();
需要为Chrome添加启动参数配置,常见的CommonJS示例写法如下:
const chrome = require('selenium-webdriver/chrome') const options = new chrome.Options() options.addArguments('--disable-dev-shm-usage') options.addArguments('--no-sandbox') options.addArguments('--headless') let driver = await new Builder().forBrowser(Browser.CHROME).setChromeOptions(options).build();
但该写法在ES模块环境下执行会抛出错误:
require is not defined in ES module scope, you can use import instead
项目已全量使用ES模块的import语法,改造成CommonJS成本过高,需要基于import语法实现相同配置能力。
实现方法
直接通过ES模块的import语法从selenium-webdriver的chrome子路径导入Options类即可,无需引入整个chrome模块,完整可运行代码如下:
import { Builder, Browser } from "selenium-webdriver"; // 导入Chrome配置类,若Node版本要求显式文件后缀可写为 selenium-webdriver/chrome.js import { Options as ChromeOptions } from "selenium-webdriver/chrome"; const options = new ChromeOptions(); options.addArguments('--disable-dev-shm-usage'); options.addArguments('--no-sandbox'); options.addArguments('--headless'); const driver = await new Builder() .forBrowser(Browser.CHROME) .setChromeOptions(options) .build();
补充说明
- 导入时给Options起别名ChromeOptions是为了避免后续引入其他浏览器的Options类产生命名冲突,不需要多浏览器配置时也可以直接写
import { Options } from "selenium-webdriver/chrome" - 该写法和项目现有import语法完全兼容,不需要修改其他已有代码
- Firefox、Edge等其他浏览器的启动配置逻辑完全一致,从对应子路径导入对应Options类即可使用
内容的提问来源于stack exchange,提问作者user567
相关产品推荐
相关产品推荐

