Last active
June 12, 2024 09:14
-
-
Save joyc/9832fcee7c6e8d654fdebba5a48184f3 to your computer and use it in GitHub Desktop.
page load time test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Measure Page Loading Time by Selenium & ChromeDriver 0.2 | |
Performance Timing Events flow | |
navigationStart -> redirectStart -> redirectEnd -> fetchStart -> domainLookupStart -> domainLookupEnd | |
-> connectStart -> connectEnd -> requestStart -> responseStart -> responseEnd | |
-> domLoading -> domInteractive -> domContentLoaded -> domComplete -> loadEventStart -> loadEventEnd | |
by: chuang.li | |
""" | |
from time import sleep | |
import threading | |
from selenium import webdriver | |
from selenium.webdriver.common.by import By | |
from selenium.webdriver.support.ui import WebDriverWait | |
from selenium.webdriver.support import expected_conditions as EC | |
class PageLoadTime: | |
'''measure page load time with Selenium & ChromeDriver''' | |
def __init__(self, url): | |
self.url = url | |
def setup(self): | |
self.driver = webdriver.Chrome(executable_path=r'C:\python\webdriver\chromedriver.exe') | |
def test_load_page(self): | |
driver = self.driver | |
driver.get(self.url) | |
while "xx製作所" not in driver.title: | |
driver.refresh() | |
sleep(2) | |
try: | |
# waiting for whole page or search results loading | |
element = WebDriverWait(driver, 50).until(EC.presence_of_element_located((By.ID, "search-num-per-page")) | |
) | |
if element.is_displayed(): time.sleep(1) | |
except: pass | |
return True | |
def get_time(self): | |
navigationStart = self.driver.execute_script("return window.performance.timing.navigationStart") | |
responseEnd = self.driver.execute_script("return window.performance.timing.responseEnd") | |
domComplete = self.driver.execute_script("return window.performance.timing.domComplete") | |
loadEventEnd = self.driver.execute_script("return window.performance.timing.loadEventEnd") | |
backendPerformance = responseEnd - navigationStart | |
domperformance = domComplete - responseEnd | |
frontendPerformance = loadEventEnd - responseEnd | |
FinisheTime = backendPerformance + frontendPerformance | |
print("Back End: %s" % backendPerformance) | |
print("Dom End: %s" % domperformance) | |
print("Front End: %s" % frontendPerformance) | |
print("Finish: %s" % (backendPerformance + frontendPerformance)) | |
return backendPerformance, domperformance, frontendPerformance, FinisheTime | |
def teardown(self): | |
# self.driver.delete_cookie() | |
self.driver.quit() | |
if __name__ == "__main__": | |
url = "https://www.mxxx.com/search/productsearch?cate=cgsubHighVoltageResistors&partno=MHR0307&rows=100" | |
# url = "https://www.muxx.com/" | |
p = PageLoadTime(url) | |
p.setup() | |
while p.test_load_page(): | |
p.get_time() | |
p.teardown() | |
break | |
print('Done!') | |
# Todo | |
# def load(func, loop): | |
# for i in range(loop): | |
# print('okokok') | |
# sleep(2) | |
# threads = [] | |
# thd = threading.Thread(target=load, args('dd', 2)) | |
# threads.append(t) | |
# for t in threads: | |
# t.start() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment