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 地址的主要内容,如果未能解决你的问题,请参考以下文章