Chrome DevTools 获取 websocket 地址

Posted

技术标签:

【中文标题】Chrome DevTools 获取 websocket 地址【英文标题】:Chrome DevTools getting websocket address 【发布时间】:2018-08-03 23:26:34 【问题描述】:

当使用 Chrome 作为 Selenium webdriver 时如下:

from selenium import webdriver
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.close()

stdout 的第一行总是这样的:

DevTools listening on ws://127.0.0.1:13007/devtools/browser/53aa377a-3789-4a8a-a565-dfd0f3622d38

如何在代码中获取此地址?我没有看到driver 实例的任何明显的方法或属性(仅从名称来看)可能包含此信息。

【问题讨论】:

【参考方案1】:

我没有找到如何直接使用 webdriver 获取它。 但这里有两种选择:

from selenium import webdriver

tmpChromeDir = 'c:\tmp\ChromeTmp'

options = webdriver.ChromeOptions()
options.add_argument('user-data-dir=' + tmpChromeDir)

driver = webdriver.Chrome(chrome_options=options)

with open(tmpChromeDir + '/DevToolsActivePort') as fp:
    port = fp.readline().replace("\n", "")
    path = fp.readline().replace("\n", "")

print('---> ws://127.0.0.1:' + port + path)

from selenium import webdriver
import requests

options = webdriver.ChromeOptions()
options.add_argument('remote-debugging-port=9222')

driver = webdriver.Chrome(chrome_options=options)

result = requests.get('http://127.0.0.1:9222/json/version').json()

print(result['webSocketDebuggerUrl'])

【讨论】:

第二个选项:如果你不知道远程调试端口(或者你不想/可以在源代码中硬编码它),那么你可以从webdriver获取主机和端口:webdriver.capabilities['goog:chromeOptions']['debuggerAddress']【参考方案2】:

主持人driver.command_executor._conn.host

其余的:如果可以实现,我很确定您需要使用 webdriver 执行 javascript。我找不到任何明显的方法来收集这个,但我很好奇为什么这在运行时对你有用?

【讨论】:

以上是关于Chrome DevTools 获取 websocket 地址的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 扩展,获取 devtools HAR 数据

使用 selenium 获取 Chrome Devtools 内容的 Python 脚本

如何在 chrome devtools 中获取 FPS

如何从 chrome 开发工具性能框架中获取屏幕截图

chrome DevTools使用技巧

你未必知道的12个Chrome DevTools使用技巧