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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:57:20