From cd6c8993880ab6849155ac0085b961972a56cf07 Mon Sep 17 00:00:00 2001 From: KenanZhu <3471685733@qq.com> Date: Sat, 22 Nov 2025 14:13:23 +0800 Subject: [PATCH] fix(*): optimize the operators' performance when invoking webdriver we consume the wait time of webdriver and its implicit wait time --- AutoLib.py | 8 +++++--- LibChecker.py | 2 +- LibCheckin.py | 2 +- LibLogin.py | 6 +++--- LibReserve.py | 33 ++++++++++++++++++++++++++------- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/AutoLib.py b/AutoLib.py index af0b070..4b13aec 100644 --- a/AutoLib.py +++ b/AutoLib.py @@ -91,7 +91,7 @@ class AutoLib(MsgBase): self.__driver = webdriver.Firefox(service=service, options=edge_options) case _: raise Exception(f"不支持的浏览器驱动类型: {self.__driver_type}") - self.__driver.implicitly_wait(10) + self.__driver.implicitly_wait(1) self.__driver.execute_script( "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" ) @@ -122,7 +122,7 @@ class AutoLib(MsgBase): # wait for page load try: - WebDriverWait(self.__driver, 5).until( # title contains "首页" + WebDriverWait(self.__driver, 2).until( # title contains "首页" EC.title_contains("首页") ) WebDriverWait(self.__driver, 2).until( # username field presence @@ -147,7 +147,9 @@ class AutoLib(MsgBase): self, ) -> bool: - self.__driver.get(self.__system_config_reader.get("library/host_url")) + url = self.__system_config_reader.get("library/host_url") + url += self.__system_config_reader.get("library/login_url") + self.__driver.get(url) if not self.__waitResponseLoad(): return False return True diff --git a/LibChecker.py b/LibChecker.py index c68b255..c03be86 100644 --- a/LibChecker.py +++ b/LibChecker.py @@ -55,7 +55,7 @@ class LibChecker(LibOperator): ) -> bool: try: - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.element_to_be_clickable((By.XPATH, "//a[@href='/history?type=SEAT']")) ).click() WebDriverWait(self.__driver, 2).until( diff --git a/LibCheckin.py b/LibCheckin.py index a3d2f52..17cf49c 100644 --- a/LibCheckin.py +++ b/LibCheckin.py @@ -38,7 +38,7 @@ class LibCheckin(LibOperator): ) -> bool: try: - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.presence_of_element_located((By.CLASS_NAME, "ui_dialog")) ) WebDriverWait(self.__driver, 2).until( diff --git a/LibLogin.py b/LibLogin.py index 7ea02a7..491611b 100644 --- a/LibLogin.py +++ b/LibLogin.py @@ -41,13 +41,13 @@ class LibLogin(LibOperator): # wait to verify login success try: - WebDriverWait(self.__driver, 5).until( # title contains "自选座位 :: 座位预约系统" + WebDriverWait(self.__driver, 2).until( # title contains "自选座位 :: 座位预约系统" EC.title_contains("自选座位 :: 座位预约系统") ) - WebDriverWait(self.__driver, 3).until( # search button presence + WebDriverWait(self.__driver, 2).until( # search button presence EC.presence_of_element_located((By.ID, "search")) ) - WebDriverWait(self.__driver, 3).until( # select content presence + WebDriverWait(self.__driver, 2).until( # select content presence EC.presence_of_element_located((By.CLASS_NAME, "selectContent")) ) return True diff --git a/LibReserve.py b/LibReserve.py index 700187e..a114433 100644 --- a/LibReserve.py +++ b/LibReserve.py @@ -55,13 +55,13 @@ class LibReserve(LibOperator): ) -> bool: try: - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.presence_of_element_located((By.CLASS_NAME, "layoutSeat")) ) title_elements = [] # reserve failed without title elements, so we need to try try: - WebDriverWait(self.__driver, 1).until( + WebDriverWait(self.__driver, 2).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".layoutSeat dt")) ) title_elements = self.__driver.find_elements( @@ -309,12 +309,12 @@ class LibReserve(LibOperator): try: # click the trigger element - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.element_to_be_clickable(trigger_locator) ).click() if option_locator: # select the option element if specified - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.element_to_be_clickable(option_locator) ).click() self._showTrace(success_msg) @@ -386,9 +386,16 @@ class LibReserve(LibOperator): try: # wait fot seat layout element to load - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.presence_of_element_located((By.ID, "seatLayout")) ) + WebDriverWait(self.__driver, 2).until( + EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li[id^='seat_']")) + ) + except: + self._showTrace(f"座位加载失败 !") + return False + try: all_seats = self.__driver.find_elements( By.CSS_SELECTOR, "li[id^='seat_']" ) @@ -397,7 +404,7 @@ class LibReserve(LibOperator): if not seat_id_upper == seat.text.lstrip('0'): continue seat_link = seat.find_element(By.TAG_NAME, "a") - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.element_to_be_clickable(seat_link) ) seat_link.click() @@ -419,6 +426,15 @@ class LibReserve(LibOperator): prefer_earlier: bool = True ) -> int: + try: + WebDriverWait(self.__driver, 2).until( + EC.presence_of_all_elements_located( + (By.CSS_SELECTOR, f"#{time_id} ul li a") + ) + ) + except: + self._showTrace(f"{time_type} 选择失败 ! : 当前未查询到可用时间") + return -1 try: all_time_opts = self.__driver.find_elements( By.CSS_SELECTOR, @@ -429,6 +445,9 @@ class LibReserve(LibOperator): best_actual_diff = None best_time_opt = None + if not all_time_opts: + self._showTrace(f"{time_type} 选择失败 ! : 当前未查询到可用时间") + return -1 for time_opt in all_time_opts: time_attr = time_opt.get_attribute("time") if time_attr == "now": @@ -544,7 +563,7 @@ class LibReserve(LibOperator): return False # map page try: - WebDriverWait(self.__driver, 5).until( + WebDriverWait(self.__driver, 2).until( EC.element_to_be_clickable((By.XPATH, "//a[@href='/map']")) ).click() WebDriverWait(self.__driver, 2).until(