mirror of
https://github.com/KenanZhu/AutoLibrary.git
synced 2026-06-18 15:33:03 +08:00
fix(pages): 移除裸 except Exception 改用精确异常类型并加固元素操作防护
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ See the LICENSE file for details.
|
||||
import queue
|
||||
|
||||
from selenium.common.exceptions import (
|
||||
ElementNotInteractableException,
|
||||
NoSuchElementException,
|
||||
TimeoutException,
|
||||
)
|
||||
@@ -83,9 +84,6 @@ class CheckinFlow(MsgBase):
|
||||
dialog.clickOk()
|
||||
self._showTrace(f"用户 {username} 签到失败 !", self.TraceLevel.ERROR)
|
||||
return False
|
||||
except (NoSuchElementException, TimeoutException):
|
||||
self._showTrace("签到时发生未知错误 !", self.TraceLevel.ERROR)
|
||||
return False
|
||||
except Exception:
|
||||
except (TimeoutException, NoSuchElementException, ElementNotInteractableException):
|
||||
self._showTrace("签到时发生未知错误 !", self.TraceLevel.ERROR)
|
||||
return False
|
||||
|
||||
@@ -39,6 +39,28 @@ class RenewFlow(MsgBase):
|
||||
self._driver: WebDriver = driver
|
||||
self._shell: MainShell = shell
|
||||
|
||||
def _validateRenewTime(
|
||||
self,
|
||||
end_time: str,
|
||||
target_renew_mins: int,
|
||||
) -> bool:
|
||||
|
||||
if target_renew_mins > self.LIBRARY_CLOSE_MINS:
|
||||
actual_renew_duration = self.LIBRARY_CLOSE_MINS - timeStrToMins(end_time)
|
||||
if actual_renew_duration <= 0:
|
||||
self._showTrace(
|
||||
f"当前结束时间 {end_time} 已接近闭馆时间,无法续约 !", self.TraceLevel.ERROR
|
||||
)
|
||||
return False
|
||||
self._showTrace(
|
||||
f"续约时间已调整至闭馆时间 "
|
||||
f"{minsToTimeStr(self.LIBRARY_CLOSE_MINS)},"
|
||||
f"实际续约时长为 "
|
||||
f"{actual_renew_duration // 60} 小时 "
|
||||
f"{actual_renew_duration % 60} 分钟"
|
||||
)
|
||||
return True
|
||||
|
||||
def execute(
|
||||
self,
|
||||
username: str,
|
||||
@@ -106,37 +128,7 @@ class RenewFlow(MsgBase):
|
||||
self._showTrace(f"当前可供续约的时间有: {result.free_times}")
|
||||
self._shell.refresh()
|
||||
return False
|
||||
except (NoSuchElementException, TimeoutException) as e:
|
||||
except (NoSuchElementException, TimeoutException, ElementNotInteractableException) as e:
|
||||
self._showTrace(f"用户 {username} 续约失败 ! : {e}", self.TraceLevel.ERROR)
|
||||
self._shell.refresh()
|
||||
return False
|
||||
except (ElementNotInteractableException) as e:
|
||||
self._showTrace(f"用户 {username} 续约失败 ! : {e}", self.TraceLevel.ERROR)
|
||||
self._shell.refresh()
|
||||
return False
|
||||
except Exception as e:
|
||||
self._showTrace(f"用户 {username} 续约失败 ! : {e}", self.TraceLevel.ERROR)
|
||||
self._shell.refresh()
|
||||
return False
|
||||
|
||||
def _validateRenewTime(
|
||||
self,
|
||||
end_time: str,
|
||||
target_renew_mins: int,
|
||||
) -> bool:
|
||||
|
||||
if target_renew_mins > self.LIBRARY_CLOSE_MINS:
|
||||
actual_renew_duration = self.LIBRARY_CLOSE_MINS - timeStrToMins(end_time)
|
||||
if actual_renew_duration <= 0:
|
||||
self._showTrace(
|
||||
f"当前结束时间 {end_time} 已接近闭馆时间,无法续约 !", self.TraceLevel.ERROR
|
||||
)
|
||||
return False
|
||||
self._showTrace(
|
||||
f"续约时间已调整至闭馆时间 "
|
||||
f"{minsToTimeStr(self.LIBRARY_CLOSE_MINS)},"
|
||||
f"实际续约时长为 "
|
||||
f"{actual_renew_duration // 60} 小时 "
|
||||
f"{actual_renew_duration % 60} 分钟"
|
||||
)
|
||||
return True
|
||||
|
||||
@@ -12,7 +12,6 @@ from dataclasses import dataclass
|
||||
|
||||
from selenium.common.exceptions import (
|
||||
ElementNotInteractableException,
|
||||
NoSuchElementException,
|
||||
TimeoutException,
|
||||
)
|
||||
from selenium.webdriver.remote.webdriver import WebDriver
|
||||
@@ -70,10 +69,7 @@ class ReserveFlow(MsgBase):
|
||||
|
||||
try:
|
||||
view = self._shell.gotoReserveView()
|
||||
except (NoSuchElementException, TimeoutException) as e:
|
||||
self._showTrace(f"加载预约选座页面失败 ! : {e}", self.TraceLevel.ERROR)
|
||||
return False
|
||||
except Exception as e:
|
||||
except (TimeoutException, ElementNotInteractableException) as e:
|
||||
self._showTrace(f"加载预约选座页面失败 ! : {e}", self.TraceLevel.ERROR)
|
||||
return False
|
||||
if not view.selectDate(ctx.date):
|
||||
@@ -140,8 +136,6 @@ class ReserveFlow(MsgBase):
|
||||
self._showTrace("预约结果加载失败 !", self.TraceLevel.ERROR)
|
||||
except (TimeoutException, ElementNotInteractableException):
|
||||
self._showTrace("预约提交失败 !", self.TraceLevel.ERROR)
|
||||
except Exception:
|
||||
self._showTrace("预约提交失败 !", self.TraceLevel.ERROR)
|
||||
if not submit_reserve and have_hover_on_page:
|
||||
view.refresh()
|
||||
if reserve_success:
|
||||
|
||||
Reference in New Issue
Block a user