1
1
mirror of https://github.com/KenanZhu/AutoLibrary.git synced 2026-06-18 07:23:03 +08:00

Compare commits

..

1 Commits

Author SHA1 Message Date
KenanZhu cd6c899388 fix(*): optimize the operators' performance when invoking webdriver
we consume the wait time of webdriver and its
implicit wait time
2025-11-22 14:13:23 +08:00
5 changed files with 36 additions and 15 deletions
+5 -3
View File
@@ -91,7 +91,7 @@ class AutoLib(MsgBase):
self.__driver = webdriver.Firefox(service=service, options=edge_options) self.__driver = webdriver.Firefox(service=service, options=edge_options)
case _: case _:
raise Exception(f"不支持的浏览器驱动类型: {self.__driver_type}") raise Exception(f"不支持的浏览器驱动类型: {self.__driver_type}")
self.__driver.implicitly_wait(10) self.__driver.implicitly_wait(1)
self.__driver.execute_script( self.__driver.execute_script(
"Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
) )
@@ -122,7 +122,7 @@ class AutoLib(MsgBase):
# wait for page load # wait for page load
try: try:
WebDriverWait(self.__driver, 5).until( # title contains "首页" WebDriverWait(self.__driver, 2).until( # title contains "首页"
EC.title_contains("首页") EC.title_contains("首页")
) )
WebDriverWait(self.__driver, 2).until( # username field presence WebDriverWait(self.__driver, 2).until( # username field presence
@@ -147,7 +147,9 @@ class AutoLib(MsgBase):
self, self,
) -> bool: ) -> 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(): if not self.__waitResponseLoad():
return False return False
return True return True
+1 -1
View File
@@ -55,7 +55,7 @@ class LibChecker(LibOperator):
) -> bool: ) -> bool:
try: try:
WebDriverWait(self.__driver, 5).until( WebDriverWait(self.__driver, 2).until(
EC.element_to_be_clickable((By.XPATH, "//a[@href='/history?type=SEAT']")) EC.element_to_be_clickable((By.XPATH, "//a[@href='/history?type=SEAT']"))
).click() ).click()
WebDriverWait(self.__driver, 2).until( WebDriverWait(self.__driver, 2).until(
+1 -1
View File
@@ -38,7 +38,7 @@ class LibCheckin(LibOperator):
) -> bool: ) -> bool:
try: try:
WebDriverWait(self.__driver, 5).until( WebDriverWait(self.__driver, 2).until(
EC.presence_of_element_located((By.CLASS_NAME, "ui_dialog")) EC.presence_of_element_located((By.CLASS_NAME, "ui_dialog"))
) )
WebDriverWait(self.__driver, 2).until( WebDriverWait(self.__driver, 2).until(
+3 -3
View File
@@ -41,13 +41,13 @@ class LibLogin(LibOperator):
# wait to verify login success # wait to verify login success
try: try:
WebDriverWait(self.__driver, 5).until( # title contains "自选座位 :: 座位预约系统" WebDriverWait(self.__driver, 2).until( # title contains "自选座位 :: 座位预约系统"
EC.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")) 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")) EC.presence_of_element_located((By.CLASS_NAME, "selectContent"))
) )
return True return True
+26 -7
View File
@@ -55,13 +55,13 @@ class LibReserve(LibOperator):
) -> bool: ) -> bool:
try: try:
WebDriverWait(self.__driver, 5).until( WebDriverWait(self.__driver, 2).until(
EC.presence_of_element_located((By.CLASS_NAME, "layoutSeat")) EC.presence_of_element_located((By.CLASS_NAME, "layoutSeat"))
) )
title_elements = [] title_elements = []
# reserve failed without title elements, so we need to try # reserve failed without title elements, so we need to try
try: try:
WebDriverWait(self.__driver, 1).until( WebDriverWait(self.__driver, 2).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".layoutSeat dt")) EC.presence_of_element_located((By.CSS_SELECTOR, ".layoutSeat dt"))
) )
title_elements = self.__driver.find_elements( title_elements = self.__driver.find_elements(
@@ -309,12 +309,12 @@ class LibReserve(LibOperator):
try: try:
# click the trigger element # click the trigger element
WebDriverWait(self.__driver, 5).until( WebDriverWait(self.__driver, 2).until(
EC.element_to_be_clickable(trigger_locator) EC.element_to_be_clickable(trigger_locator)
).click() ).click()
if option_locator: if option_locator:
# select the option element if specified # select the option element if specified
WebDriverWait(self.__driver, 5).until( WebDriverWait(self.__driver, 2).until(
EC.element_to_be_clickable(option_locator) EC.element_to_be_clickable(option_locator)
).click() ).click()
self._showTrace(success_msg) self._showTrace(success_msg)
@@ -386,9 +386,16 @@ class LibReserve(LibOperator):
try: try:
# wait fot seat layout element to load # 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")) 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( all_seats = self.__driver.find_elements(
By.CSS_SELECTOR, "li[id^='seat_']" By.CSS_SELECTOR, "li[id^='seat_']"
) )
@@ -397,7 +404,7 @@ class LibReserve(LibOperator):
if not seat_id_upper == seat.text.lstrip('0'): if not seat_id_upper == seat.text.lstrip('0'):
continue continue
seat_link = seat.find_element(By.TAG_NAME, "a") 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) EC.element_to_be_clickable(seat_link)
) )
seat_link.click() seat_link.click()
@@ -419,6 +426,15 @@ class LibReserve(LibOperator):
prefer_earlier: bool = True prefer_earlier: bool = True
) -> int: ) -> 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: try:
all_time_opts = self.__driver.find_elements( all_time_opts = self.__driver.find_elements(
By.CSS_SELECTOR, By.CSS_SELECTOR,
@@ -429,6 +445,9 @@ class LibReserve(LibOperator):
best_actual_diff = None best_actual_diff = None
best_time_opt = None best_time_opt = None
if not all_time_opts:
self._showTrace(f"{time_type} 选择失败 ! : 当前未查询到可用时间")
return -1
for time_opt in all_time_opts: for time_opt in all_time_opts:
time_attr = time_opt.get_attribute("time") time_attr = time_opt.get_attribute("time")
if time_attr == "now": if time_attr == "now":
@@ -544,7 +563,7 @@ class LibReserve(LibOperator):
return False return False
# map page # map page
try: try:
WebDriverWait(self.__driver, 5).until( WebDriverWait(self.__driver, 2).until(
EC.element_to_be_clickable((By.XPATH, "//a[@href='/map']")) EC.element_to_be_clickable((By.XPATH, "//a[@href='/map']"))
).click() ).click()
WebDriverWait(self.__driver, 2).until( WebDriverWait(self.__driver, 2).until(