【问题标题】:Getting chrome performance and tracing logs获取 chrome 性能和跟踪日志
【发布时间】:2015-02-23 00:39:04
【问题描述】:

我正在尝试按照Web Performance Testing with WebDriver google 测试自动化会议演讲和 ChromeDriver "Performance Log" documentation page 中建议的想法来获取我想提交给webpagetest 以便稍后进行性能分析的跟踪数据。

如何使用 python selenium 绑定 检索性能日志?


我已尝试打印出驱动程序实例中可用的log_types

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://stackoverflow.com')

print driver.log_types

driver.close()

但只有

[u'browser', u'driver']

我没有看到相关的command-line switch

【问题讨论】:

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


    【解决方案1】:

    性能日志默认禁用

    要启用它,请使用DesiredCapabilities 并配置loggingPrefs

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities.CHROME
     #as per latest docs
    caps['goog:loggingPrefs'] = {'performance': 'ALL'}
    driver = webdriver.Chrome(desired_capabilities=caps)
    
    driver.get('https://stackoverflow.com')
    
    for entry in driver.get_log('performance'):
        print(entry)
    
    driver.quit()
    

    这会导致控制台上打印出一堆跟踪日志条目:

    {u'timestamp': 1419487459178, u'message': u'{"message":{"method":"Network.responseReceived","params":{"frameId":"2105.1","loaderId":"2105.2","requestId":"2105.1","response":{"connectionId":0,"connectionReused":false,"encodedDataLength":-1,"fromDiskCache":false,"fromServiceWorker":false,"headers":{"Access-Control-Allow-Origin":"*","Content-Type":"text/plain;charset=US-ASCII"},"mimeType":"text/plain","status":200,"statusText":"OK","url":"data:,"},"timestamp":1419487458.92934,"type":"Document"}},"webview":"2C66E956-A48B-456B-8A4E-1022F699AA92"}', u'level': u'INFO'}
    {u'timestamp': 1419487459178, u'message': u'{"message":{"method":"Network.loadingFinished","params":{"encodedDataLength":0,"requestId":"2105.1","timestamp":1419487458.92936}},"webview":"2C66E956-A48B-456B-8A4E-1022F699AA92"}', u'level': u'INFO'}
    {u'timestamp': 1419487459178, u'message': u'{"message":{"method":"Page.frameNavigated","params":{"frame":{"id":"2105.1","loaderId":"2105.2","mimeType":"text/plain","securityOrigin":"://","url":"data:,"}}},"webview":"2C66E956-A48B-456B-8A4E-1022F699AA92"}', u'level': u'INFO'}
    ...
    

    【讨论】:

    • 我知道这个答案已经过时了,但你知道是否有办法只获取“网络”事件(即当你转到“网络”选项卡时会看到什么Chrome 的开发者工具)。我可以从日志中解析出我需要的内容,但我认为有一种更有效的方法,但我在找出文档时遇到了一些麻烦。谢谢!
    • 一直在寻找这个答案。谢谢!
    • 对于较新版本的 Chrome,您必须使用 caps["goog:loggingPrefs"] = {"performance": "ALL"}
    • log里面的message entry是字符串log需要序列化成JSON。例如。 import json s = log['message'] json_acceptable_string = s.replace("'", "\"") d = json.loads(json_acceptable_string)
    【解决方案2】:

    只是为了补充@Rajesh 的答案,以防万一你不起作用。这可能是由于您使用的是旧版 chromedriver,所以在这种情况下,它将是 loggingPrefs 而不是 goog:loggingPrefs

    caps['loggingPrefs'] = {'performance': 'ALL'}
    

    有关更多信息,请查看以下内容:

    Getting console.log output from Chrome with Selenium Python API bindings

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2017-06-27
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多