mirror of
https://github.com/KenanZhu/AutoLibrary.git
synced 2026-06-18 23:43:02 +08:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a599c4f63 | |||
| d2cef258aa | |||
| a4c5ee299e | |||
| 7d92717136 |
+13
-4
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user