首页 > 解决方案 > 在网页抓取和 Puppeteer 方面,Chrome 和 Chromium 有什么区别?

问题描述

我有一个工作脚本,它在 node_modules 的 puppeteer 模块中安装的内置 Chromium 上使用 Puppeteer 刮取标题。

但是,我正在尝试部署到 Heroku,但他们似乎没有用于 headless-chromium 的 buildpack,因此我尝试使用计算机的 chrome 安装在 localhost 上运行我的脚本。

结果:它不起作用。它不会抛出错误或任何东西,它只是返回标题字符串不是空的,就好像内容没有正确加载一样。

它也适用于 firefox,但我认为那是因为 firefox 没有得到适当的支持。完全支持 Chrome(我想)。我正在使用 Chrome 版本 85。我阅读了文档中关于 Chrome 和 Chromium 之间差异的文章(https://www.howtogeek.com/202825/what%E2%80%99s-the-difference- between-chromium-and-chrome/),我没有发现任何会导致 Puppeteer 失败的东西。并不是说我对 Puppeteer 或任何一个浏览器的内部工作原理了解很多,但大多数差异就像浏览器扩展和媒体格式以及 Linux 安全设置一样。

这是我的代码:

    (async () => {
      const browser = await puppet.launch({
        //headless: false,
        args: ["--no-sandbox", "--disable-setuid-sandbox"],
        //executablePath: "/app/.apt/usr/bin/google-chrome-stable",
        // executablePath:
           "./node_modules/puppeteer/.local-chromium/mac-782078/chrome-mac/Chromium.app/Contents/MacOS/Chromium",
        // executablePath:
        //   "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
        // executablePath: "/Applications/Firefox.app/Contents/MacOS/firefox",
      });
      const page = await browser.newPage();
      console.log(req.params[0]);
      await page.goto(req.params[0], { waitUntil: "networkidle2" }); //this is the url
      console.log("done waiting");
      title = await page.$eval("title", (el) => el.innerText);

注意 executablePath 选项列表。“google-chrome-stable”是我用来测试 Heroku 是否正常工作的那个。“MacOS/Google Chrome”安装是 localhost Google Chrome 安装。“./node_modules/puppeteer/....../Chromium”是本地主机 Chromium。

其中,只有 localhost Chromium 有效。

标签: google-chromeherokuweb-scrapingpuppeteerchromium

解决方案


推荐阅读