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

refactor(pages): 拆分 _dialogs 为独立组件文件,解耦 Service 构造函数,消除 PageObject 重复逻辑

- 将 _dialogs.py 拆分为 pages/components/ 下的独立文件,Overlay 基类同步移入
- CaptchaHandler / RecordChecker 构造函数不再持有 PageObject,改为方法参数注入
- LoginPage.login() 直接接收 auto_captcha 参数,简化 captcha_solver 调用链
- SeatMapOverlay.selectSeat 引入两层查找:先按 ID 直查,失败后遍历匹配
- 移除 ReserveView 中与 Dialog/Overlay 重复的方法(selectSeat、getAvailableTimeOptions)
- AutoLibPages 拆分 __initPagesServices / __initPagesFlows
- 修复 RecordsView.MORE_BTN 选择器被错误 snake_case 化(more_btn → moreBtn)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-26 13:41:55 +08:00
parent 2226e8ac90
commit a6bc103c73
19 changed files with 608 additions and 580 deletions
+26 -26
View File
@@ -26,42 +26,18 @@ class CaptchaHandler(MsgBase):
self,
input_queue: queue.Queue,
output_queue: queue.Queue,
login_page: LoginPage,
) -> None:
super().__init__(input_queue, output_queue)
self._login_page = login_page
self._ocr = ddddocr.DdddOcr()
def solveCaptcha(
self,
auto_captcha: bool = True,
) -> str:
max_attempts = 3
for _ in range(max_attempts):
if auto_captcha:
captcha_text = self._autoRecognize()
else:
self._showTrace("用户未配置自动识别验证码, 请手动输入验证码 !", 20, no_log=True)
captcha_text = self._manualRecognize()
if captcha_text:
return captcha_text
else:
if not self._login_page.refreshCaptcha():
return ""
self._showTrace(
f"验证码识别失败 {max_attempts} 次, 达到最大尝试次数 !",
self.TraceLevel.WARNING,
)
return ""
def _autoRecognize(
self,
login_page: LoginPage,
) -> str:
try:
img_src = self._login_page.getCaptchaImageSrc()
img_src = login_page.getCaptchaImageSrc()
base64_str = img_src.split(',', 1)[1]
captcha_img = base64.b64decode(base64_str)
captcha_text = self._ocr.classification(captcha_img)
@@ -99,3 +75,27 @@ class CaptchaHandler(MsgBase):
except Exception as e:
self._showTrace(f"输入验证码失败 ! : {e}", self.TraceLevel.ERROR)
return ""
def solveCaptcha(
self,
login_page: LoginPage,
auto_captcha: bool = True,
) -> str:
max_attempts = 3
for _ in range(max_attempts):
if auto_captcha:
captcha_text = self._autoRecognize(login_page)
else:
self._showTrace("用户未配置自动识别验证码, 请手动输入验证码 !", 20, no_log=True)
captcha_text = self._manualRecognize()
if captcha_text:
return captcha_text
else:
if not login_page.refreshCaptcha():
return ""
self._showTrace(
f"验证码识别失败 {max_attempts} 次, 达到最大尝试次数 !",
self.TraceLevel.WARNING,
)
return ""