websocket 如何在puppeteer示例上使用puppeteer.connect,该示例运行在云函数上

rsl1atfo  于 2022-12-18  发布在  其他
关注(0)|答案(1)|浏览(418)

我正在尝试连接到一个puppeteer示例,运行在谷歌云功能v2。
以下是函数内部的设置:

import getPort from 'get-port';
import puppeteer from "puppeteer-extra";

const port = await getPort();
const browser = await puppeteer.launch({
    args: [
        `--remote-debugging-port=${port}`,
    ],
});

console.log(browser.wsEndpoint());

这记录了一个端点。我复制了该端点,并尝试通过它从客户端连接到

await puppeteer.connect(myEndpoint);

但它抛出了一个错误:
SocketException: OS Error: The remote computer refused the network connection.如何修复此问题?

dwbf0jvd

dwbf0jvd1#

您遇到的错误在使用websockets和端口连接时很常见。您可以检查此错误是否总是在连接请求期间发生,这表明计算机存在,但它没有侦听指定端口的服务,或者有防火墙阻止你。要检查并消除最可能的原因,最简单的起点是尝试使用telnet或Putty从客户端计算机手动连接。那么问题出在你的客户端代码中,如果不是,你需要检查WebSocket端点字符串是否有正确的值。
根据puppeteer文档,检查浏览器WebSocket端点的字符串值如下:puppeteer.connect(options) options <Object>browserWSEndpoint <?string>要连接到的浏览器WebSocket端点。这将返回:浏览器WebSocket url。浏览器websocket端点,可用作puppeteer.connect的参数。格式为

ws://${host}:${port}/devtools/browser/<id>

您可以从http://${host}:${port}/json/version中找到webSocketDebuggerUrl。
了解更多关于devtools协议和浏览器端点的信息。
另请查看以下链接以了解类似的实施:

相关问题