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/