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

Abd*_*lah 5 headless chromium puppeteer

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();
Run Code Online (Sandbox Code Playgroud)

这个有效

await page.goto('https://example.com');
Run Code Online (Sandbox Code Playgroud)

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

await page.goto("www.example.com');
Run Code Online (Sandbox Code Playgroud)

它抛出错误

协议错误 (Page.navigate):无法导航到无效 URL

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

Gra*_*ler 7

谷歌浏览器网址列(地址栏)已建成功能,可以处理多种复杂问题,如:附加协议,自动完成,等等。

Puppeteer 提供了一个 API 来通过DevTools 协议控制 Chrome 或 Chromium ,因此目前大部分功能超出了 Puppeteer 的范围。

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

网址应包括方案,例如https://

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

铬源代码显示,通过导航Page.navigate明确检查的有效性,而且如果该网址是无效的,它会返回错误,“不能导航到无效的网址。”

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