PythonとSeleniumとWebDriverでDOM構築完了待機とWEB読込完了待機
DOM構築完了待機の作成、および、
WEB読込完了待機の作成をしてみたが、
SeleniumのPageLoadStrategyは、
デフォルトでページが完全にロードされるまで、
待機する仕様のようなので、必要無かった...orz
import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait def function_in_function(outer): def _predicate(inner): print(outer) print(inner) return _predicate def expected_conditions_document_ready_state_complete_or_interactive(): def _predicate(driver): document_ready_state = driver.execute_script("return document.readyState") print(document_ready_state) return document_ready_state == "complete" or document_ready_state == "interactive" return _predicate def expected_conditions_document_ready_state_complete(): def _predicate(driver): document_ready_state = driver.execute_script("return document.readyState") print(document_ready_state) return document_ready_state == "complete" return _predicate def main(): print("PRESS ENTER KEY TO BOOT") input() # function_in_function("Hello")("World") driver = None try: # -------------------------------------------------------------- # Firefox # -------------------------------------------------------------- options = webdriver.FirefoxOptions() options.page_load_strategy = "none" driver = None driver = webdriver.Firefox(options=options) driver.get("https://feo52.hatenablog.jp/entry/2022/01/01/000001") print("get") time.sleep(1) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete_or_interactive()) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete()) time.sleep(1) except Exception as e: print(e) finally: driver = driver.quit() if driver is not None else None try: # -------------------------------------------------------------- # Firefox # -------------------------------------------------------------- driver = None driver = webdriver.Firefox() driver.get("https://feo52.hatenablog.jp/entry/2022/01/01/000001") print("get") time.sleep(1) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete_or_interactive()) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete()) time.sleep(1) except Exception as e: print(e) finally: driver = driver.quit() if driver is not None else None try: # -------------------------------------------------------------- # Edge # -------------------------------------------------------------- options = webdriver.EdgeOptions() options.page_load_strategy = "none" driver = None driver = webdriver.Edge(options=options) driver.get("https://feo52.hatenablog.jp/entry/2022/01/01/000001") print("get") time.sleep(1) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete_or_interactive()) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete()) time.sleep(1) except Exception as e: print(e) finally: driver = driver.quit() if driver is not None else None try: # -------------------------------------------------------------- # Edge # -------------------------------------------------------------- driver = None driver = webdriver.Edge() driver.get("https://feo52.hatenablog.jp/entry/2022/01/01/000001") print("get") time.sleep(1) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete_or_interactive()) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete()) time.sleep(1) except Exception as e: print(e) finally: driver = driver.quit() if driver is not None else None try: # -------------------------------------------------------------- # Chrome # -------------------------------------------------------------- options = webdriver.ChromeOptions() options.page_load_strategy = "none" driver = None driver = webdriver.Chrome(options=options) driver.get("https://feo52.hatenablog.jp/entry/2022/01/01/000001") print("get") time.sleep(1) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete_or_interactive()) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete()) time.sleep(1) except Exception as e: print(e) finally: driver = driver.quit() if driver is not None else None try: # -------------------------------------------------------------- # Chrome # -------------------------------------------------------------- driver = None driver = webdriver.Chrome() driver.get("https://feo52.hatenablog.jp/entry/2022/01/01/000001") print("get") time.sleep(1) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete_or_interactive()) WebDriverWait(driver, 10).until(expected_conditions_document_ready_state_complete()) time.sleep(1) except Exception as e: print(e) finally: driver = driver.quit() if driver is not None else None print() print("PRESS ENTER KEY TO EXIT") input() if __name__ == "__main__": main()
Link1
https://www.selenium.dev/ja/documentation/
https://www.selenium.dev/ja/documentation/webdriver/
https://www.selenium.dev/ja/documentation/webdriver/drivers/options/
https://www.selenium.dev/ja/documentation/webdriver/drivers/options/#pageloadstrategy
Link2
https://www.selenium.dev/selenium/docs/api/py/
https://www.selenium.dev/selenium/docs/api/py/api.html
https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.wait.html
https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html
Link3
https://github.com/SeleniumHQ/selenium
https://github.com/SeleniumHQ/selenium/tree/trunk/py/selenium/webdriver
https://github.com/SeleniumHQ/selenium/blob/trunk/py/selenium/webdriver/support/wait.py
https://github.com/SeleniumHQ/selenium/blob/trunk/py/selenium/webdriver/support/expected_conditions.py