如何使用puppeteer-core,puppeteer使用本地Chrome,puppeteer下载失败问题

puppeteer由于众所周知的原因会下载失败,我们可以使用puppeteer-core配合本地的Chrome或者Chrome Canary来使用:
首先安装puppeteer-core和Carlo(会用到Carlo的find_chrome模块,可以在node_modules/carlo/lib/目录下找到)
//安装对应chrome@71对应的puppeteer
npm install puppeteer-core@chrome-71
//安装Carlo
npm i carlo
//或 yarn add carlo
不同版本的浏览器可以使用对应版本的puppeteer-core,以减少不兼容问题。
具体的puppeteer对应的Chrome版本查看:https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md 中的Releases per Chromium Version部分
const puppeteer = require('puppeteer-core');
//find_chrome模块来源于GoogleChromeLabs的Carlo,可以查看本机安装Chrome目录,详细请查看底部博客,

const findChrome = require('./node_modules/carlo/lib/find_chrome');

(async () => {
  let findChromePath = await findChrome({});
  let executablePath = findChromePath.executablePath;
  console.log(executablePath)
  const browser = await puppeteer.launch({
    executablePath,
    headless: false
  });

  const page = await browser.newPage();
  await page.goto('http://www.woleigequ.net/');
  /*
  	dosomeThing
  */

  await browser.close();
})();
以上代码部分来自下面的博客:

Web技术试炼地

chaos-fe

### 关于 PuppeteerPuppeteer-Core 文件解析 PuppeteerPuppeteer-Core 是两个不同的库,主要区别在于它们的依赖项和适用场景。对于 `puppeteer-core` 中的文件路径 `internal/puppeteer-core.js` 以及 `puppeteer` 库中的 `lib/cjs/puppeteer/puppeteer.js` 文件,可以提供一些具体信息。 #### Puppeteer vs Puppeteer-Core 特定文件分析 在 Puppeteer 官方文档中提到,`puppeteer` 提供了一个完整的浏览器环境,而 `puppeteer-core` 则是一个轻量级版本,不自带 Chromium 浏览器实例[^1]。因此,在源码结构上两者会有所不同: - **`puppeteer-core/internal/puppeteer-core.js`** 这个文件位于 Puppeteer Core 的内部实现部分,主要用于定义核心功能逻辑而不涉及浏览器启动等外部资源管理。该文件负责初始化 Puppeteer 实例并设置必要的参数配置。由于缺少内置浏览器支持,此模块更关注如何连接到已有的 Chrome 或 Chromium 实例来执行自动化操作。 ```javascript // 示例代码片段展示 puppeteer-core 内部可能的操作方式 const { Browser } = require('./common/Browser'); async function createBrowserConnection(transport, product) { const browser = new Browser(transport, false /* ignoreHTTPSErrors */, true /* defaultViewport */); } ``` - **`puppeteer/lib/cjs/puppeteer/puppeteer.js`** 对应的是标准版 Puppeteer 库的一部分,除了包含上述相同的核心业务外还增加了更多辅助工具和服务端口监听等功能。特别是当涉及到自动下载并运行 Chromium 浏览器时,这部分代码显得尤为重要。它不仅实现了基本的功能接口调用,同时也处理了与本地系统的交互细节,比如临时目录创建、日志记录等。 ```javascript // 示例代码片段展示了 puppeteer 如何封装更多的实用特性 class PuppeteerNode extends Common.Puppeteer { static async launch(launchOptions) { // 启动新的浏览器进程... await this._browserProcess.setup(); return connection; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗小行星!

恰饭ing

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值