Использование возможностей 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 секунд в этом последнем случае, что явно не то, что я хотел.
Кто-нибудь имеет опыт захвата этой информации о загрузке страницы?