【问题标题】:Chrome DevTools getting websocket addressChrome DevTools 获取 websocket 地址
【发布时间】: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 实例的任何明显的方法或属性(仅从名称来看)可能包含此信息。

【问题讨论】:

    标签: python google-chrome selenium selenium-webdriver google-chrome-devtools


    【解决方案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。我找不到任何明显的方法来收集这个,但我很好奇为什么这在运行时对你有用?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 2012-05-15
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      相关资源
      最近更新 更多