2

我在无头模式下在 AWS EC2 AMI (Linux) 上运行 puppeteer 以进行一些网络抓取。是否可以从我的本地 Windows 设置中远程跟踪它的 GUI?

我参考了这篇文章,想知道是否添加--remote-debugging-port=9222到我的代码然后http://localhost:9222在本地浏览器上访问会让我看到 GUI。是否有可能做到这一点?我不确定我是否在正确的轨道上。任何帮助,将不胜感激。

4

1 回答 1

5

是的,这是可能的。您必须设置--remote-debugging-address参数。

引用Chromium 命令行开关列表

使用给定地址而不是默认环回来接受远程调试连接。应与 --remote-debugging-port 一起使用。请注意,远程调试协议不执行任何身份验证,因此过于广泛地公开它可能会带来安全风险。

解释

默认情况下,Chrome 绑定到127.0.0.1(仅限本地接口),它只允许来自机器本身的连接。如果您将参数设置为0.0.0.0Chrome,则会侦听所有允许来自机器外部的连接的网络接口(有关更多信息,请查看stackoverflow 上的此答案)。但是,您仍然需要确保没有可能阻止连接的防火墙,但默认情况下不应如此。

这意味着,像这样启动 Chrome 将允许从另一台计算机进行调试:

chrome --remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 [possible other flags]

您现在可以访问http://IP_OF_YOUR_MACHINE:9222并且会遇到 Chrome 的 DevTools GUI。或者,您可以使用以下方式连接到机器puppeteer.connect

const browser = await puppeteer.connect({ browserURL: 'http://...:9222' });
// ...

安全注意事项

请记住,此端口会暴露给任何可以访问 Internet 的人。您可能需要考虑使用防火墙来阻止连接或使用像node-http-proxy这样的库来过滤任何连接,然后再将它们传递到浏览器。

于 2019-08-19T16:18:20.513 回答