python selenium perfLoggingPrefs фильтрация - PullRequest
0 голосов
/ 12 марта 2019

Согласно документации chromedriver я должен иметь возможность отключать события из домена Page при регистрации производительности.Я попытался установить perfLoggingPrefs, но я все еще получаю события Page.Правильно ли я это настраиваю?

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

options = webdriver.ChromeOptions()
options.add_argument("--disable-extensions")
options.add_argument("--allow-running-insecure-content")
options.add_argument("--ignore-certificate-errors")
options.add_argument("--disable-single-click-autofill")
options.add_argument("--disable-autofill-keyboard-accessory-view[8]")
options.add_argument("--disable-full-form-autofill-ios")

options.headless = True
options.add_argument('--disable-gpu')

caps = DesiredCapabilities.CHROME
caps['loggingPrefs'] = {
    'browser': 'ALL',
    'performance' : 'ALL',
    }
caps['perfLoggingPrefs'] = {
    'enableNetwork' : True,
    'enablePage' : False,
    'enableTimeline' : False
    }

driver = webdriver.Chrome(options=options, desired_capabilities=caps)

###  connect to my site, do some actions then I call
perfs = driver.get_log('performance')
for row in perfs:
    print(perfs)

Вывод:

{'level': 'INFO', 'message': '{"message":{"method":"Network.loadingFinished","params":{"encodedDataLength":0,"requestId":"A9C189F82C9479C83512A78F9FF9F3EA","shouldReportCorbBlocking":false,"timestamp":3369761.457106}},"webview":"A7D8907A1D283AC9EC1B03BC3C786243"}', 'timestamp': 1552406406094}
{'level': 'INFO', 'message': '{"message":{"method":"Page.frameNavigated","params":{"frame":{"id":"A7D8907A1D283AC9EC1B03BC3C786243","loaderId":"A9C189F82C9479C83512A78F9FF9F3EA","mimeType":"text/plain","securityOrigin":"://","url":"data:,"}}},"webview":"A7D8907A1D283AC9EC1B03BC3C786243"}', 'timestamp': 1552406406094}
{'level': 'INFO', 'message': '{"message":{"method":"Page.loadEventFired","params":{"timestamp":3369761.458842}},"webview":"A7D8907A1D283AC9EC1B03BC3C786243"}', 'timestamp': 1552406406094}
{'level': 'INFO', 'message': '{"message":{"method":"Page.frameStoppedLoading","params":{"frameId":"A7D8907A1D283AC9EC1B03BC3C786243"}},"webview":"A7D8907A1D283AC9EC1B03BC3C786243"}', 'timestamp': 1552406406094}
{'level': 'INFO', 'message': '{"message":{"method":"Page.domContentEventFired","params":{"timestamp":3369761.45929}},"webview":"A7D8907A1D283AC9EC1B03BC3C786243"}', 'timestamp': 1552406406094}
{'level': 'INFO', 'message': '{"message":{"method":"Page.frameResized","params":{}},"webview":"A7D8907A1D283AC9EC1B03BC3C786243"}', 'timestamp': 1552406406419}

Я попытался использовать строки 'true' и 'false' в словаре, но без каких-либо изменений в захваченном журнале.

caps['perfLoggingPrefs'] = {
    'enableNetwork' : 'true',
    'enablePage' : 'false',
    'enableTimeline' : 'false'
    }

Использование

  • python 3.7
  • chromedriver 2.38.552518 (72.0.3626.121)
  • python selenium 3.141.0

1 Ответ

1 голос
/ 09 мая 2019

вы должны передать perfLoggingPrefs как chromeOptions, вы можете сделать это через add_experimental_option()

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

options = webdriver.ChromeOptions()
options.headless = True

caps = DesiredCapabilities.CHROME.copy()
caps['loggingPrefs'] = {
    'browser': 'ALL',
    'performance' : 'ALL',
    }

options.add_experimental_option('perfLoggingPrefs', {
    'enableNetwork' : True,
    'enablePage' : False,
    })

driver = webdriver.Chrome(options=options, desired_capabilities=caps)
driver.get('http://google.com')
perfs = driver.get_log('performance')
for row in perfs:
    print(row)

Однако даже когда enablePage установлен на False, события Page по-прежнемуобъявиться.С другой стороны, фильтрация работает на enableNetwork, поэтому возможно ошибка в chromedriver.

вы всегда можете отфильтровать журналы вручную, например:

filtered = [p for p in perfs if not json.loads(p["message"])["message"]["method"].startswith('Page')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...