Skip to content

Instantly share code, notes, and snippets.

@joyc
Last active June 12, 2024 09:14
Show Gist options
  • Save joyc/9832fcee7c6e8d654fdebba5a48184f3 to your computer and use it in GitHub Desktop.
Save joyc/9832fcee7c6e8d654fdebba5a48184f3 to your computer and use it in GitHub Desktop.
page load time test
"""
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