配置electron中puppeteer executablePath的正确姿势

配置 Electron 中 Puppeteer executablePath 的正确姿势

Puppeteer 是一个流行的 Node.js 库,它提供了一个高级的 API 来控制 Chrome 或 Chromium 浏览器。在 Electron 中使用 Puppeteer 可以帮助开发人员进行自动化测试、爬虫等任务。然而,在 Electron 中使用 Puppeteer 时,需要设置 Puppeteer 的 executablePath,以便将其与 Electron 中的浏览器实例相关联。

问题背景

在 Electron 中使用 Puppeteer 时,通常需要手动指定可执行文件的路径。但是,由于 Electron 和 Puppeteer 都是基于 Chromium 构建的,因此找到正确的可执行文件路径可能会变得有些复杂。

一种常见的错误是使用 Puppeteer 的默认值来配置 executablePath

----- --------- - ---------------------
----- ------- - ----- ------------------
  --------------- -----------
---

这种方式可能会导致以下错误:

------ ------ -- ------ ------- ----- --------- ------

这是因为 Puppeteer 默认在本地没有找到可执行文件时,会尝试从 npm 包中的 .local-chromium 目录中寻找 Chromium 可执行文件。但是,Electron 通常并不包含该目录,因此 Puppeteer 无法找到对应的可执行文件。

解决方案

我们需要手动指定正确的 executablePath,使 Puppeteer 能够正常运行。

方案一:使用 Electron 的 app.getPath() 函数

Electron 的 app 模块提供了一个 getPath() 函数,可以获取 Electron 中应用程序的各种路径。我们可以使用这个函数来查找正确的可执行文件路径。

----- --------- - --------------------------
----- - --- - - --------------------

----- ------- - ----- ------------------
  --------------- ---------------------------------------
---

在这个例子中,我们使用 app.getPath('userData') 来获取 Electron 应用程序的用户数据目录,然后将 chrome.exe 添加到该路径下。

方案二:使用 Electron-builder 的 nodeIntegration: true 选项

如果您正在使用 Electron-builder 打包应用程序,则可以配置 nodeIntegration: true,让 Electron 和 Puppeteer 共享相同的 Node.js 实例。这样,Puppeteer 将能够自动查找 Electron 中的 Chromium 可执行文件。

----- --------- - ---------------------
----- - --- - - ---------------------------

----- ------- - ----- ------------------
  --------------- ------------------
---

在这个例子中,我们使用 remote 模块来获取 Electron 的 app 对象,并使用 getPath('exe') 方法来获取可执行文件的路径。

示例代码

----- --------- - --------------------------
----- - --- - - --------------------

------ -- -- -
  ----- ------- - ----- ------------------
    --------- ------
    --------------- ---------------------------------------
  ---
  ----- ---- - ----- ------------------
  ----- ------------------------------------
  ----- ----------------- ----- ------------- ---

  ----- ----------------
-----

结论

在 Electron 中使用 Puppeteer 需要手动指定 executablePath。我们可以使用 Electron 提供的 getPath() 函数或者配置 nodeIntegration: true 来查找正确的可执行文件路径。这篇文章提供了两种解决方案,并包含了示例代码,希望能够帮助开发人员顺利地在 Electron 中使用 Puppeteer 进行自动化测试和爬虫等任务。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/50377