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:
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user