在无头模式下运行时,是否可以远程跟踪铬的GUI?

时间:2019-08-19 04:37:59

标签: node.js linux puppeteer google-chrome-headless chrome-remote-debugging

我正在以无头模式在AWS EC2 AMI(Linux)上运行puppeteer,以进行一些Web抓取。是否可以从本地Windows设置远程跟踪其GUI?

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

1 个答案:

答案 0 :(得分:0)

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

引用List of Chromium Command Line Switches

  

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

说明

默认情况下,Chrome绑定到127.0.0.1(仅本地接口),该接口仅允许来自计算机本身的连接。如果您将参数设置为0.0.0.0,Chrome浏览器将监听所有允许从计算机外部进行连接的网络接口(有关更多信息,请查看this answer on 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之类的库来过滤任何连接,然后再将其传递到浏览器。