我正在通过chromedriver运行chrome headless,通过python运行selenium。我在Mac和Linux上都遇到了以下问题。
Im启动chrome如下所示:
if self.headless:
options.headless = True
options.add_argument("--headless")
if self.debug_port:
logging.info(f"Setting up remote debugging on port {self.debug_port}")
options.add_argument(f"--remote-debugging-port={self.debug_port}")
options.add_argument(f"--remote-debugging-address=0.0.0.0")
如果我从chrome的另一个主实例连接到http://localhost:9222
,我可以看到会话列表并无缝地连接到它。在这一点上,我打开了一个窗口,其中包含远程会话和开发控制台的截屏。
下面是一个成功示例:
当我连接到http://192.168.1.194:9222
时,我得到了会话列表,当选择一个会话时,开发控制台打开,但它没有启动到ws://192.168.1.194
的websocket连接,所以录屏和远程调试功能不可用。
以下是失败示例:
发布于 2021-03-04 03:30:26
使用以下步骤,我能够远程调试。然而,截屏功能不起作用。最终,这就是我需要的,所以在我的情况下,这只是50%的解决方案。
因此,正如上面在注释中指出的,阻碍远程调试工作的是chrome调试器链接到https://chrome-devtools-frontend.appspot.com/.....
,并为websocket参数传递了一个ws://192.168.1.194
值。任何浏览器都会基于它是混合内容而固有地阻止它--即: https + ws
这里需要的是在http服务器上运行chrome dev工具前端,并将您的chrome实例定向到该服务器,而不是appspot实例。
解决步骤
1安装depot_tools (构建的前提条件)
2检出devtools-前端存储库
3构建chrome devtools前端
https://github.com/ChromeDevTools/devtools-frontend/blob/master/docs/workflows.md#build
4启动devtools-前端http服务器
5运行2个chrome实例,并使用其中一个实例调试另一个实例
5.1启动chrome headless的第一个实例
已启用...with远程调试。查看上面问题中的python方法,或者使用相同的参数从命令行执行此操作
5.2启动第二个chrome实例
...using一个不同的用户数据目录--user-data-dir=<some-path>
5.3导航到http://192.168.1.194:9222
使用第一个chrome实例的IP地址和您选择的端口。
5.4创建到本地开发服务器的链接
chrome的第二个实例现在将向您显示调试第一个实例的每个打开的选项卡的链接。然而,链接仍将转到https://chrome-devtools-frontend.appspot.com/....
。您需要复制和粘贴所需的链接,并将主机名替换为在步骤4中启动的devtools前端的主机名
沃拉!!
如果你知道如何让截屏视频工作,请在下面发表评论!?
注意:我也试过在devtools前端使用npm run server
命令,但由于某种原因,服务器在¯\_(ツ)_/¯
上完全不能工作
https://stackoverflow.com/questions/66411149
复制相似问题