google-chrome - 在网页抓取和 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 有效。
解决方案
推荐阅读
- javascript - 如何使用 ramda 的 sortBy 函数按降序排序?
- android - 创建通知消息
- javascript - Javascript或JQuery中div的抛物线动画
- javascript - 在电子的主要过程之外创建菜单栏
- django - Django DRF 使用 JWT 获取缺少的 Auth 标头,但在 ReadOnly 视图上具有权限和身份验证
- python - 'str' 对象不能解释为整数:Python 错误
- php - 在 WP 插件中返回而不是回显
- python - 'int' 对象不可下标 // python 矩阵问题
- c# - 在 DDD 架构中,我应该将与按角色用户过滤数据相关的查询逻辑放在哪里
- python - 在 Python 中并排显示数据框的唯一值和计数