chromium - puppeteer 不会打开没有协议(protocol)的 url

原文 标签 chromium puppeteer headless

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();

这个有效
await page.goto('https://example.com');

这不起作用(没有协议(protocol),即 http/https)
await page.goto("www.example.com');

它抛出错误

Protocol error (Page.navigate): Cannot navigate to invalid URL



为什么它不像我们在谷歌浏览器中打开时那样附加协议(protocol)?

最佳答案

Google Chrome Omnibox (地址栏)内置了处理多种复杂性的功能,例如:附加协议(protocol)、自动完成等。

Puppeteer 提供了一个 API 来通过 DevTools Protocol 控制 Chrome 或 Chromium , 目前很多这个功能都超出了 Puppeteer 的范围。

函数 page.goto() 的 Puppeteer 文档明确指出:

The url should include scheme, e.g. https://.



这是因为 page.goto()利用 Page.navigate 来自 Chrome DevTools 协议(protocol)。

Chromium source code显示通过 Page.navigate 进行的导航明确检查有效性,如果 URL 无效,它将返回错误“无法导航到无效 URL”。

您可以轻松地在 Node.js 中创建一个将协议(protocol)附加到 URL 的函数,这可能是您的问题的解决方法。

关于chromium - puppeteer 不会打开没有协议(protocol)的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52090433/

相关文章:

javascript - (Puppeteer) 有没有办法通过 x, y 获取元素查询?

.net - 当托管的 Chromium Embedded 出现 JavaScript 错误时,是否可以获得通知?

node.js - Docker Node :Alpine-12: how to install Chromium 73 in Dockerfile?

javascript - 从控制台运行脚本但从 Bookmarklet 打印变量?

c# - 不知道为什么使用 headless (headless)浏览器

java - 如何在java中运行 headless (headless)模式

java - 使 java 忽略对 X11 的调用

google-chrome - 我如何专门检测 Chromium 与 Chrome?

javascript - 如何在 Puppeteer 中设置最大视口(viewport)?

javascript - Jest 是否异步运行用 describe() 定义的测试套件?