from pathlib import Path from tempfile import TemporaryDirectory import shutil from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait HTML = """ Selenium page load wait demo

Orders

Loading assets

""" options = Options() options.add_argument("--headless=new") options.add_argument("--window-size=1280,720") options.page_load_strategy = "eager" for browser_name in ("google-chrome", "chromium", "chromium-browser"): browser_path = shutil.which(browser_name) if browser_path: options.binary_location = browser_path break driver_path = shutil.which("chromedriver") service = Service(driver_path) if driver_path else Service() with TemporaryDirectory() as tmpdir: page = Path(tmpdir) / "page-load-wait.html" page.write_text(HTML, encoding="utf-8") driver = webdriver.Chrome(service=service, options=options) try: driver.set_page_load_timeout(10) driver.get(page.as_uri()) wait = WebDriverWait(driver, 10, poll_frequency=0.2) wait.until( lambda browser: browser.execute_script("return document.readyState") == "complete", "document.readyState did not reach complete", ) marker = wait.until( EC.visibility_of_element_located((By.ID, "app-ready")), "application ready marker did not appear", ) print(f"title: {driver.title}") print(f"ready_state: {driver.execute_script('return document.readyState')}") print(f"status: {driver.find_element(By.ID, 'status').text}") print(f"marker: {marker.text}") finally: driver.quit()