我正在使用 Selenium 构建 Electron 桌面应用程序。
我用这个命令初始化了我的项目
npm init electron-app@latest my-new-app -- --template=vite-typescript
您也可以查看此链接
我安装了依赖项。
yarn add selenium-webdriver && yarn add -D @types/selenium-webdriver
在我的main.ts文件中,有一段调用Selenium的代码
let driver: WebDriver | null = null
try {
const options = new chrome.Options()
// chrome.setDefaultService(new chrome.ServiceBuilder("/path/to/chromedriver"))
driver = await new Builder()
// .setChromeOptions(options)
.forBrowser(Browser.CHROME)
.build()
await driver.get("https://www.google.com")
await driver.findElement(By.name("q")).sendKeys("webdriver", Key.RETURN)
await driver.wait(until.titleIs("webdriver - Google Search"), 1000)
} finally {
if (driver) {
await driver.quit()
}
}
当我使用selenium而不使用chrome.Options时就可以了
但是当我使用这条线时(
const options = new chrome.Options()
)我收到了这个错误消息。
App threw an error during load
Error: Failed to import atoms module get-attribute.js. If running in dev mode, you need to run `bazel build //javascript/node/selenium-webdriver/lib/atoms:get-attribute.js` from the projectroot: Error: Could not dynamically require "./atoms/get-attribute.js". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.
at requireAtom (/Users/ittae/GitHub/my-vite-app/.vite/build/main.js:1585:13)
at Object.<anonymous> (/Users/ittae/GitHub/my-vite-app/.vite/build/main.js:1572:22)
at Module._compile (node:internal/modules/cjs/loader:1391:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1451:10)
at Module.load (node:internal/modules/cjs/loader:1214:32)
at Module._load (node:internal/modules/cjs/loader:1030:12)
at c._load (node:electron/js2c/node_init:2:13672)
at cjsLoader (node:internal/modules/esm/translators:360:17)
at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:305:7)
at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
所以我不能使用 chrome.Options、chrome.ServiceBuilder
我不知道这个错误是从哪里来的? Vite、硒、电子?
如何解决这个问题?
我将项目移至 Webpack 而不是 Vite。但在这种情况下,如果没有 chromedriver,它就无法工作。
我将 chromedriver 添加到 /usr/local/bin 但 webpack 项目找不到 chromedriver。但我会尝试在Webpack环境中解决它。
终于找到解决办法了。
打开
vite.main.config.ts
文件。有一个 config:UserConfig
变量。
向该变量添加一个变量。
像这样:
const config: UserConfig = {
build: {
lib: {
entry: forgeConfigSelf.entry!,
fileName: () => '[name].js',
formats: ['cjs'],
},
rollupOptions: {
external,
},
commonjsOptions: {
dynamicRequireTargets: ['node_modules/selenium-webdriver/lib/atoms/*'],
},
},
}