【问题标题】:View list of element sources with Selenium?使用 Selenium 查看元素来源列表?
【发布时间】:2019-08-05 20:41:46
【问题描述】:

我想在 Selenium webdriver 中使用 Python 创建一个 if/then 语句,以检查是否正在播放音频。我知道使用检查元素我可以看到数据源列表,并且在播放音频的任何时候都会创建/显示一个新的数据源。这是下面的示例图像。我如何使用 Selenium 来检测这一点? *数据源不是HTML,而是实际数据来自哪里

Chrome inspect element image

【问题讨论】:

    标签: html selenium selenium-webdriver html5-canvas


    【解决方案1】:

    浏览器或 chromedriver 日志有时包含网络响应....等等。浏览器日志称为perfomance,驱动程序日志称为driver。它们返回一个类似 json 的对象,您可以对其进行解析以提取带有 Network 方法的事件:

    {'level': 'INFO',
      'message': '{"message":{"method":"Page.frameStoppedLoading","params":{"frameId":"FB10764A3ABF7FFC83110C39C5F7BF77"}},"webview":"C2D13BD13CF743B6D0695B35E9CC935C"}',
      'timestamp': 1538607113832},
     {'level': 'INFO',
      'message': '{"message":{"method":"Page.frameDetached","params":{"frameId":"FB10764A3ABF7FFC83110C39C5F7BF77"}},"webview":"C2D13BD13CF743B6D0695B35E9CC935C"}',
      'timestamp': 1538607113838},
     {'level': 'INFO',
      'message': '{"message":{"method":"Network.requestWillBeSent","params":{"documentURL":"https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response","frameId":"C2D13BD13CF743B6D0695B35E9CC935C","hasUserGesture":false,"initiator":{"type":"other"},"loaderId":"5331BFDC4F466FCED920CFC9F033D2EC","request":{"headers":{"Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"},"initialPriority":"VeryHigh","method":"GET","mixedContentType":"none","referrerPolicy":"no-referrer-when-downgrade","url":"https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response"},"requestId":"5331BFDC4F466FCED920CFC9F033D2EC","timestamp":104499.729,"type":"Document","wallTime":1538607113.838206}},"webview":"C2D13BD13CF743B6D0695B35E9CC935C"}',
      'timestamp': 1538607113839},...}
    

    您需要使用DesiredCapabilities启用日志记录,然后您可以使用python的JSON模块解析它:

    import json
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities.CHROME
    caps['loggingPrefs'] = {'performance': 'ALL'}
    driver = webdriver.Chrome(desired_capabilities=caps)
    driver.get('https://stackoverflow.com/questions/55171235/view-list-of-element-sources-with-selenium/55171555#55171555’)
    
    def process_browser_log_entry(entry):
        response = json.loads(entry['message'])['message']
        return response
    
    browser_log = driver.get_log('performance') 
    events = [process_browser_log_entry(entry) for entry in browser_log]
    events = [event for event in events if 'Network.response' in event['method']]
    

    这是(不幸的是)我找到的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多