puppeteer 不会在没有协议的情况下打开 url

puppeteer doesn't open a url without protocol

const puppeteer = require('puppeteer');

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

这个有效

await page.goto('https://example.com');

这不起作用(没有协议,即 http/https)

await page.goto("www.example.com');

它抛出错误

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

为什么它不像我们在 Google Chrome 中打开时那样附加协议?

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

Puppeteer 提供了一个 API 来控制 Chrome 或 DevTools Protocol 上的 Chromium,因此很多功能目前不在 Puppeteer 的范围内。

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

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

这是因为 page.goto() 使用 Chrome DevTools 协议中的 Page.navigate

Chromium source code 显示通过 Page.navigate 的导航明确检查有效性,如果 URL 无效,它将 return 错误,"Cannot navigate to invalid URL."

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

当我将 url 作为数组

发送时,我遇到了同样的错误
const urls = [["https://www.example1.com"], ["https://www.example2.com]]

解构它为我解决了

urls = [].concat(...urls)
for(let url of urls) {
    await page.goto(url)
 }