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)
}
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)
}