【问题标题】:Selenium Chrome can't see browser logs InvalidArgumentExceptionSelenium Chrome 看不到浏览器日志 InvalidArgumentException
【发布时间】:2019-06-08 15:20:48
【问题描述】:

在使用 Python 使用 selenium webdriver 打开网站后,我试图获取 HTTP 状态代码,我发现无法获取 HTTP 状态代码,因此唯一的方法是获取网络日志并从那里获取 HTTP 状态代码

所以我试图在 selenium 中打印日志,但它给了我一个 InvalidArgumentException

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

# enable browser logging
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'performance':'ALL' }

driver = webdriver.Chrome(desired_capabilities=d)

# load the desired webpage
driver.get('http://foo.com')

# print messages
for entry in driver.get_log('performance'):
    print(entry)

这是运行后的错误

InvalidArgumentException                  Traceback (most recent call last)
<ipython-input-13-8480733201dc> in <module>
     12 
     13 # print messages
---> 14 for entry in driver.get_log('performance'):
     15     print(entry)

c:\users\slimshady\appdata\local\programs\python\python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py in get_log(self, log_type)
   1260             driver.get_log('server')
   1261         """
-> 1262         return self.execute(Command.GET_LOG, {'type': log_type})['value']

c:\users\slimshady\appdata\local\programs\python\python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

c:\users\slimshady\appdata\local\programs\python\python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

InvalidArgumentException: Message: invalid argument: log type 'performance' not found
  (Session info: chrome=75.0.3770.80)

我在这里可能做错了什么?

【问题讨论】:

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


    【解决方案1】:

    如 Chrome 驱动程序 75 的 release notes 中所述,功能 loggingPrefs 已根据 W3C 标准的要求重命名为 goog:loggingPrefs。因此,设置功能的代码应该进行调整,至少由于日志捕获的原因,没有必要回退到非 w3c 模式。

    d['goog:loggingPrefs'] = { 'performance':'ALL' }
    

    【讨论】:

      【解决方案2】:

      chrome 75 及其 chromedriver 也有同样的问题,将 'w3c' 设置为 False 解决了这个问题:

      from selenium import webdriver
      from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
      from selenium.webdriver.chrome.options import Options
      
      d = DesiredCapabilities.CHROME
      d['loggingPrefs'] = { 'performance':'ALL' }
      
      chrome_options = Options()
      chrome_options.add_experimental_option('w3c', False)
      
      driver = webdriver.Chrome(desired_capabilities=d, options=chrome_options)
      

      【讨论】:

      • Chrome 未来版本中将移除在非 W3C 模式下运行的功能
      猜你喜欢
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 2013-08-20
      • 2013-08-24
      • 2021-09-07
      • 1970-01-01
      • 2021-03-07
      相关资源
      最近更新 更多