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

Compare commits

...

4 Commits

4 changed files with 63 additions and 23 deletions
+13 -4
View File
@@ -96,13 +96,21 @@ class AutoLib(MsgBase):
except Exception as e: except Exception as e:
self._showTrace(f"浏览器驱动初始化失败: {e}") self._showTrace(f"浏览器驱动初始化失败: {e}")
return False return False
# init library operators self._showTrace(f"浏览器驱动已初始化, 类型: {self.__driver_type}, 路径: {self.__driver_path}")
return True
def __initLibOperators(
self
):
if not self.__driver:
self._showTrace(f"浏览器驱动未初始化, 请先初始化浏览器驱动 !")
return
self.__lib_checker = LibChecker(self._input_queue, self._output_queue, self.__driver) self.__lib_checker = LibChecker(self._input_queue, self._output_queue, self.__driver)
self.__lib_login = LibLogin(self._input_queue, self._output_queue, self.__driver) self.__lib_login = LibLogin(self._input_queue, self._output_queue, self.__driver)
self.__lib_logout = LibLogout(self._input_queue, self._output_queue, self.__driver) self.__lib_logout = LibLogout(self._input_queue, self._output_queue, self.__driver)
self.__lib_reserve = LibReserve(self._input_queue, self._output_queue, self.__driver) self.__lib_reserve = LibReserve(self._input_queue, self._output_queue, self.__driver)
self._showTrace(f"浏览器驱动已初始化, 类型: {self.__driver_type}, 路径: {self.__driver_path}")
return True
def __waitResponseLoad( def __waitResponseLoad(
@@ -204,6 +212,7 @@ class AutoLib(MsgBase):
else: else:
if not self.__initDriverUrl(): if not self.__initDriverUrl():
return return
self.__initLibOperators()
user_counter = {"current": 0, "success": 0, "failed": 0, "passed": 0} user_counter = {"current": 0, "success": 0, "failed": 0, "passed": 0}
users = self.__users_config_reader.get("users") users = self.__users_config_reader.get("users")
@@ -245,5 +254,5 @@ class AutoLib(MsgBase):
self._showTrace(f"浏览器驱动已关闭") self._showTrace(f"浏览器驱动已关闭")
return True return True
else: else:
self._showTrace(f"浏览器驱动未初始化无需关闭") self._showTrace(f"浏览器驱动未初始化, 无需关闭")
return False return False
+40 -11
View File
@@ -134,6 +134,41 @@ class LibLogin(LibOperator):
return False return False
def __solveCaptcha(
self,
auto_captcha: bool = True,
) -> str:
max_attempts = 5
for _ in range(max_attempts):
if auto_captcha:
captcha_text = self.__autoRecognizeCaptcha()
else:
self._showTrace(f"用户未配置自动识别验证码, 请手动输入验证码 !")
captcha_text = self.__manualRecognizeCaptcha()
if captcha_text:
return captcha_text
self._showTrace(f"验证码识别失败 {max_attempts} 次, 请检查验证码是否正确 !")
return ""
def __fillCaptchaElement(
self,
captcha_text: str,
) -> bool:
try:
captcha_element = self.__driver.find_element(By.NAME, "answer")
captcha_element.clear()
captcha_element.send_keys(captcha_text)
return True
except Exception as e:
self._showTrace(f"验证码填写失败 ! : {e}")
self.__refreshCaptcha()
return False
def login( def login(
self, self,
username: str, username: str,
@@ -153,17 +188,11 @@ class LibLogin(LibOperator):
password, password,
): ):
continue continue
while True: captcha_text = self.__solveCaptcha(auto_captcha)
if auto_captcha: if not captcha_text:
captcha_text = self.__autoRecognizeCaptcha() continue
else: if not self.__fillCaptchaElement(captcha_text):
self._showTrace(f"用户未配置自动识别验证码, 请手动输入验证码 !") continue
captcha_text = self.__manualRecognizeCaptcha()
if captcha_text:
break
captcha_element = self.__driver.find_element(By.NAME, "answer")
captcha_element.clear()
captcha_element.send_keys(captcha_text)
self._showTrace("尝试登录...") self._showTrace("尝试登录...")
try: try:
self.__driver.find_element( self.__driver.find_element(
+8 -6
View File
@@ -83,9 +83,9 @@ class LibReserve(LibOperator):
raise raise
if "预定好了" in title or "预约成功" in title or "操作成功" in title: if "预定好了" in title or "预约成功" in title or "操作成功" in title:
if len(contents) >= 6: if len(contents) >= 6:
date_val = contents[1].split(" ")[1].strip() if " " in contents[1] else contents[1].strip() date_val = contents[1].split(" : ")[1].strip() if " : " in contents[1] else contents[1].strip()
time_val = contents[2].split(" ")[1].strip() if " " in contents[2] else contents[2].strip() time_val = contents[2].split(" : ")[1].strip() if " : " in contents[2] else contents[2].strip()
seat_val = contents[3].split(" ")[1].strip() if " " in contents[3] else contents[3].strip() seat_val = contents[3].split(" : ")[1].strip() if " : " in contents[3] else contents[3].strip()
checkin_val = contents[5].strip() checkin_val = contents[5].strip()
self._showTrace(f"\n"\ self._showTrace(f"\n"\
f" 预约成功 !\n"\ f" 预约成功 !\n"\
@@ -137,10 +137,12 @@ class LibReserve(LibOperator):
raise ValueError(f"房间 '{reserve_info['room']}' 不存在") raise ValueError(f"房间 '{reserve_info['room']}' 不存在")
if reserve_info.get("seat_id") is None: if reserve_info.get("seat_id") is None:
raise ValueError("未指定座位") raise ValueError("未指定座位")
if reserve_info["seat_id"] == "":
raise ValueError("未指定座位号")
except ValueError as e: except ValueError as e:
self._showTrace( self._showTrace(
f"预约信息错误 ! : {e}, "\ f"预约信息错误 ! : {e}, "\
f"由于缺少必要的预约信息 无法开始预约流程, 请检查预约信息是否完整" f"由于缺少必要的预约信息, 无法开始预约流程, 请检查预约信息是否完整"
) )
return False return False
@@ -224,7 +226,7 @@ class LibReserve(LibOperator):
reserve_info["begin_time"]["time"], reserve_info["end_time"]["time"] = end_time_str, begin_time_str reserve_info["begin_time"]["time"], reserve_info["end_time"]["time"] = end_time_str, begin_time_str
reserve_info["begin_time"]["prefer_early"], reserve_info["end_time"]["prefer_early"] = \ reserve_info["begin_time"]["prefer_early"], reserve_info["end_time"]["prefer_early"] = \
reserve_info["end_time"]["prefer_early"], reserve_info["begin_time"]["prefer_early"] reserve_info["end_time"]["prefer_early"], reserve_info["begin_time"]["prefer_early"]
self._showTrace("预约开始时间晚于预约结束时间自动调换开始时间和结束时间") self._showTrace("预约开始时间晚于预约结束时间, 自动调换开始时间和结束时间")
# update the begin_mins and end_mins after swap # update the begin_mins and end_mins after swap
begin_time_str, end_time_str = end_time_str, begin_time_str begin_time_str, end_time_str = end_time_str, begin_time_str
@@ -246,7 +248,7 @@ class LibReserve(LibOperator):
reserve_info["end_time"]["time"] = self.__minsToTime(new_end_mins) reserve_info["end_time"]["time"] = self.__minsToTime(new_end_mins)
self._showTrace("预约持续时间超过8小时, 自动设置为 8 小时") self._showTrace("预约持续时间超过8小时, 自动设置为 8 小时")
self._showTrace( self._showTrace(
f"预约信息检查完成准备预约 " f"预约信息检查完成, 准备预约 "
f"{reserve_info['date']} " f"{reserve_info['date']} "
f"{reserve_info['begin_time']["time"]} - " f"{reserve_info['begin_time']["time"]} - "
f"{reserve_info['end_time']["time"]} " f"{reserve_info['end_time']["time"]} "
+2 -2
View File
@@ -70,7 +70,7 @@ class AutoLibWorker(QThread):
os.path.exists(path) for path in self.__config_paths.values() os.path.exists(path) for path in self.__config_paths.values()
): ):
self.showTraceSignal.emit( self.showTraceSignal.emit(
"配置文件路径不存在请检查配置文件路径是否正确。" "配置文件路径不存在, 请检查配置文件路径是否正确。"
) )
return False return False
return True return True
@@ -102,7 +102,7 @@ class AutoLibWorker(QThread):
self.showTraceSignal.emit("AutoLibrary 运行结束") self.showTraceSignal.emit("AutoLibrary 运行结束")
except Exception as e: except Exception as e:
self.showTraceSignal.emit( self.showTraceSignal.emit(
f"AutoLibrary 运行时发生异常{e}" f"AutoLibrary 运行时发生异常 : {e}"
) )
finally: finally:
self.finishedSignal.emit() self.finishedSignal.emit()