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/

相关文章:

node.js - 在 Jenkins CI 和 Debian 上使用 ChromeHeadless 的 Karma

设置 -Djava.awt.headless=true 后的 Java Headless 异常

chromium - 生产中的CEF3单工艺模式

html - HTML <select> 下拉菜单中的选项在 Chrome 中太大

android - 自 android 4.1 以来,android webView 是否会基于 Chrome 引擎?

javascript - puppeteer 点击按钮未执行

javascript - 当队列为 'full' 时暂停循环

google-chrome - 在 headless (headless) Chrome 中设置传感器(位置)

node.js - Puppeteer 没有在 headless :false mode 中运行

node.js - 如何在 Electron 中集成和运行现有的 ReactJS 应用程序