Использование возможностей DevTools без открытия DevTools

ние проблемы

Как получить доступ к данным из инструмента Chrome Performance из консоли браузера или с помощью методов драйвера Chrome при использовании Selenium?

В частности, я заинтересован в получениивремя загрузки страницы, На верхних диаграммах я вижу, что последние элементы были загружены вокруг1700-1800 мс отметка. Журнал событий внизу показывает, что последний элемент начал загружаться (и заканчивался через несколько мс) в1720,1 мс с момента перезагрузки страницы.

Что я пытался до сих пор

Я пытался с помощьюИнтерфейс Performance Timing нравится:

console.log(performance.timing.loadEventEnd - 
performance.timing.navigationStart)
357

Но я думаю, что это измеряет некоторые другие показатели.loadEventEnd а такжеnavigationStart имеют самые крайние значения среди атрибутовtiming и их разница составляет всего 357 (мс).

Я также попытался записать информацию о производительности с помощью Selenium, как это (взял некоторые идеи изВот и переписал в Python)

import time
import json
import copy
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options

caps = copy.deepcopy(DesiredCapabilities.CHROME)
caps['loggingPrefs'] = {'performance': 'ALL'}
chromedriver_options = Options()
chromedriver_options.add_argument("--headless")
chromedriver_options.add_argument("--window-size=1920,1080")
chromedriver_options.add_argument("--log-level=3") # suppress selenium logging to stdout
driver = webdriver.Chrome(chrome_options=chromedriver_options, executable_path='chromedriver.exe', desired_capabilities=caps)
driver.set_window_position(0, 0)
driver.implicitly_wait(8) # set timeout to 8 seconds
driver.get(my_url)
time.sleep(5) # wait for page to load for the first time
_ = driver.get_log('performance') # discard all previous logs
driver.refresh()
time.sleep(5) # make sure page loaded completely before writing log
with open('logs.txt', 'a') as f:
    for entry in driver.get_log('performance'):
        f.write(str(entry) + '\n')
driver.close()

Полученные журналы содержат записи с обращениями кPage.frameStartedLoading а такжеPage.frameStoppedLoading методы и их временные метки, и у меня была идея измерить время между первымPage.frameStartedLoading и последнееPage.frameStoppedLoading после очистки журнала и вызоваdriver.refresh().

К сожалению, полученный файл журнала не имеет большого смысла. Ведение журнала производительности не останавливается (я думал, что так и должно быть, поскольку веб-страница загружается в какой-то момент, и ничего не происходит с точки зрения производительности). Если я позвонюtime.sleep(5) после обновления я бы получил несколько логов с 5 звонками каждомуPage.frameStartedLoading а такжеPage.frameStoppedLoading, Если я позвонюtime.sleep(7) Я бы получил 7 звонков каждомуPage.frameStartedLoading а такжеPage.frameStoppedLoading, И разница между отметкой времени последнегоPage.frameStoppedLoading и первыйPage.frameStartedLoading было бы ~ 7 секунд в этом последнем случае, что явно не то, что я хотел.

Кто-нибудь имеет опыт захвата этой информации о загрузке страницы?

Ответы на вопрос(1)

Ваш ответ на вопрос