mirror of
https://github.com/KenanZhu/AutoLibrary.git
synced 2026-06-19 16:03:02 +08:00
Compare commits
11 Commits
5c393595d7
...
v1.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
| d3d146b1b3 | |||
| 0f74a3b0ec | |||
| 9305c559cd | |||
| f56945f29e | |||
| 37132de4fc | |||
| ac5385bcfe | |||
| f984217bda | |||
| 4e7780fe70 | |||
| 7149cb2b7d | |||
| 2c90008fcd | |||
| 1cd39ec84c |
@@ -20,33 +20,34 @@
|
||||
1. 自动预约 - 支持自动预约
|
||||
2. 自动续约 - 支持自动续约
|
||||
3. 自动签到 - 支持自动签到
|
||||
4. 批量操作 - 支持同时预约多个用户,可以指定当前需要跳过的用户,并将用户分成多个组
|
||||
5. 定时任务 - 使用内置定时任务管理,添加定时任务,指定时间后按当前预约信息自动运行
|
||||
4. 远程签到 - 支持远程签到,无需在图书馆网络环境下即可签到
|
||||
5. 批量操作 - 支持同时预约多个用户,可以指定当前需要跳过的用户,并将用户分成多个组
|
||||
6. 定时任务 - 使用内置定时任务管理,添加定时任务,指定时间后按当前预约信息自动运行,支持设置重复任务
|
||||
7. 驱动管理 - 内置浏览器驱动自动管理,支持自动检测浏览器版本并下载对应驱动,无需手动下载
|
||||
|
||||
*1,2,3 的具体操作方法和注意事项请访问我们的 [帮助手册](https://www.autolibrary.kenanzhu.com/manuals)*
|
||||
*具体操作方法和注意事项请访问我们的 [帮助手册](https://www.autolibrary.kenanzhu.com/manuals)*
|
||||
|
||||
### 如何使用
|
||||
|
||||
1. 下载最新版本的 [AutoLibrary 压缩包](https://github.com/KenanZhu/AutoLibrary/releases/latest)。
|
||||
2. 解压下载的文件到任意目录。
|
||||
3. 下载对应浏览器类型和版本(具体操作请参考适用软件版本的 [帮助手册](https://www.autolibrary.kenanzhu.com/manuals))的驱动文件,并在配置界面的运行配置选项卡对应位置选择你下载好的浏览器驱动。
|
||||
4. 运行 `AutoLibrary-[主版本号].[次版本号].[修订版本号].Z.exe` 文件 (如 `AutoLibrary-1.0.0.exe`)。
|
||||
5. 点击 [配置] 按钮,在配置界面填写好预约信息和运行配置后,点击 [确认] 按钮。
|
||||
6. 点击 [启动脚本] 按钮,即可开始自动预约、续约、签到等操作。
|
||||
1. 下载最新版本的 [AutoLibrary 安装程序](https://github.com/KenanZhu/AutoLibrary/releases/latest) 或 [压缩包](https://github.com/KenanZhu/AutoLibrary/releases/latest) 。
|
||||
2. 双击运行安装程序进行安装,或将压缩包解压到任意目录。
|
||||
3. 运行 `AutoLibrary`,即可打开主界面。
|
||||
4. 点击 [配置] 按钮,在配置界面填写好预约信息和运行配置后,点击 [确认] 按钮。
|
||||
5. 点击 [启动脚本] 按钮,即可开始自动预约、续约、签到等操作。
|
||||
|
||||
*注意 1*: 关于浏览器驱动的下载和其它相关问题,请参考我们的 [帮助手册](https://www.autolibrary.kenanzhu.com/manuals) 中对应软件版本的内容。
|
||||
*注意 1*: 工具内置浏览器驱动自动管理功能,会自动检测本地浏览器版本并下载对应的驱动文件。如果自动下载失败,也可以手动下载驱动文件并在配置界面的运行配置选项卡对应位置选择驱动文件路径。
|
||||
|
||||
#### 平台支持 & 编译步骤
|
||||
|
||||
本工具目前仅支持 Windows 平台,由于使用 PySide6 库开发,理论上是可以自行编译并在 Linux 和 macOS 上运行,这里提供简单的编译步骤:
|
||||
|
||||
1. 确保系统安装了 Python 3.13 版本 (推荐,过低或高版本会导致兼容问题)。
|
||||
2. 安装 pyside6 selenium ddddocr 库,命令为 `pip install pyside6 selenium ddddocr`。
|
||||
2. 安装所有依赖库,命令为 `pip install -r requirements.txt` (建议在虚拟环境下操作)。
|
||||
3. 在 `batchs` 目录下运行 `compile_ui.bat` (linux 和 macOS 系统使用 `compile_ui.sh`) 文件来编译 Qt 的 UI 文件。
|
||||
4. 在上一步相同目录内运行 `compile_rc.bat` (linux 和 macOS 系统使用 `compile_rc.sh`) 文件来编译 Qt 的资源文件。
|
||||
5. 待上述步骤完成后,运行 `src/Main.py` 文件即可。
|
||||
|
||||
*注意 1*:如果 python 使用的是虚拟环境,请在虚拟环境安装依赖后,在激活的虚拟环境终端中使用 `cd src/gui/batchs` 命令切换到 `batchs` 目录下,再运行编译脚本。否则会提示缺少必要的 Qt PySide 依赖库。
|
||||
*注意 1*:如果 python 使用的是虚拟环境,请在虚拟环境安装依赖后,在激活的虚拟环境终端中使用 `cd batchs` 命令切换到 `batchs` 目录下,再运行编译脚本。否则会提示缺少必要的 Qt PySide 依赖库。
|
||||
|
||||
*注意 2*:由于 ddddocr 的代码版本问题,其中 `__init__.py` 文件中的函数 `def classification(self, img: bytes):` 中的 `image.resize` 方法传入了不符合当前 pillow 版本的 `resample` 参数 `Image.ANTIALIAS`,该重采样常量已经在 10.0.0 版中删除 [1](@ref)。请将 `image.resize` 方法中的参数替换为 `resample=Image.Resampling.LANCZOS`,具体函数如下:
|
||||
```python
|
||||
@@ -103,7 +104,7 @@ def classification(self, img: bytes):
|
||||
当前版本的功能对于正常使用已经足够,不过后续会着重完善预约时的使用体验,暂时有以下构想:
|
||||
|
||||
- 引入交互预约面板功能,预约时直接在座位分布图中选择可用座位,并按用户分配,无需事先配置预约信息。
|
||||
- 优化定时任务管理功能,用户可以在定时任务管理界面设置重复运行的定时任务,如每日预约、每周预约等。
|
||||
- ~~优化定时任务管理功能,用户可以在定时任务管理界面设置重复运行的定时任务,如每日预约、每周预约等。~~ (已完成)
|
||||
- 软件的自动更新以及公告栏功能,用户可以自动更新最新版本并获取最新公告事项。
|
||||
|
||||
不过由于本人的时间和能力有限,也需要考虑到图书馆的正常运行,所以后续功能会有所取舍,但也许会进行一些小的功能验证。
|
||||
|
||||
Binary file not shown.
@@ -56,9 +56,8 @@ def initializeWebDriverManager(
|
||||
|
||||
app_dir = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.AppDataLocation)
|
||||
driver_dir = os.path.join(app_dir, "drivers")
|
||||
logger.info("初始化驱动目录 %s", driver_dir)
|
||||
if not QDir(driver_dir).exists():
|
||||
logger.error("创建驱动目录 %s 失败", driver_dir)
|
||||
logger.info("初始化驱动目录 %s", driver_dir)
|
||||
if not QDir().mkpath(driver_dir):
|
||||
logger.error("创建驱动目录 %s 失败", driver_dir)
|
||||
return False
|
||||
|
||||
@@ -383,12 +383,17 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
|
||||
timer_task: dict
|
||||
):
|
||||
|
||||
if "history" not in timer_task:
|
||||
history = []
|
||||
else:
|
||||
history = timer_task["history"]
|
||||
history_count = len(history)
|
||||
return (
|
||||
f"任务名称:{timer_task["name"]}\n"
|
||||
f"添加时间:{timer_task["added_time"]}\n"
|
||||
f"当前状态:{timer_task["status"].value}\n"
|
||||
f"下次执行时间:{datetime.strftime(timer_task["execute_time"], "%Y-%m-%d %H:%M:%S")}\n"
|
||||
f"已记录次数:{len(timer_task['history'] if 'history' in timer_task else 0)}"
|
||||
f"已记录次数:{history_count}"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
workflow process. Do not edit manually.
|
||||
|
||||
This file is auto-generated during the workflow process.
|
||||
Last updated: 2026-02-26 15:04:28 UTC
|
||||
Last updated: 2026-03-22 14:14:19 UTC
|
||||
"""
|
||||
|
||||
AL_VERSION = "1.1.0"
|
||||
AL_TAG = "v1.1.0"
|
||||
AL_VERSION = "1.2.1"
|
||||
AL_TAG = "v1.2.1"
|
||||
AL_COMMIT_SHA = "local"
|
||||
AL_COMMIT_DATE = "null" # time zone : UTC
|
||||
AL_BUILD_DATE = "null" # time zone : UTC
|
||||
|
||||
@@ -24,7 +24,8 @@ from PySide6.QtGui import (
|
||||
|
||||
from managers.driver.WebDriverManager import (
|
||||
instance as webdriver_manager_instance,
|
||||
WebDriverManager, WebDriverInfo, WebDriverType
|
||||
WebDriverManager, WebDriverInfo, WebDriverType,
|
||||
WebDriverStatus
|
||||
)
|
||||
from gui.ALStatusLabel import ALStatusLabel
|
||||
|
||||
@@ -141,6 +142,7 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self.initializeDriverManager()
|
||||
self.refreshDriverList()
|
||||
|
||||
|
||||
def showEvent(
|
||||
self,
|
||||
event
|
||||
@@ -163,6 +165,7 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self.move(target_pos)
|
||||
return result
|
||||
|
||||
|
||||
def setupUi(
|
||||
self
|
||||
):
|
||||
@@ -267,13 +270,16 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self.__driver_manager.refresh()
|
||||
self.__driver_infos = self.__driver_manager.getDriverInfos()
|
||||
self.DriverComboBox.clear()
|
||||
for driver_info in self.__driver_infos:
|
||||
installed_idx = 0
|
||||
for i, driver_info in enumerate(self.__driver_infos):
|
||||
if driver_info.driver_status == WebDriverStatus.INSTALLED:
|
||||
installed_idx = i # get the installed driver index
|
||||
display_text = f"{driver_info.driver_type.value} - {driver_info.browser_version}"
|
||||
self.DriverComboBox.addItem(display_text)
|
||||
count = len(self.__driver_infos)
|
||||
self.BrowserCountLabel.setText(f"检测到 {count} 个可用浏览器:")
|
||||
if self.__driver_infos:
|
||||
self.onDriverComboBoxChanged(0)
|
||||
self.DriverComboBox.setCurrentIndex(installed_idx)
|
||||
|
||||
|
||||
def onDriverComboBoxChanged(
|
||||
@@ -285,6 +291,7 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
return
|
||||
driver_info = self.__driver_infos[index]
|
||||
self.updateDriverInfoDisplay(driver_info)
|
||||
self.updateProgressBarStates(driver_info)
|
||||
self.updateButtonStates(driver_info)
|
||||
|
||||
|
||||
@@ -328,18 +335,21 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self
|
||||
):
|
||||
|
||||
self.DriverComboBox.setEnabled(False)
|
||||
index = self.DriverComboBox.currentIndex()
|
||||
if index < 0 or index >= len(self.__driver_infos):
|
||||
return
|
||||
driver_info = self.__driver_infos[index]
|
||||
if driver_info.driver_status.name == "INSTALLED":
|
||||
if driver_info.driver_status == WebDriverStatus.INSTALLED:
|
||||
return
|
||||
self.StatusLabel.status = ALStatusLabel.Status.RUNNING
|
||||
self.DownloadButton.setEnabled(False)
|
||||
self.RefreshButton.setEnabled(False)
|
||||
self.DriverComboBox.setEnabled(False)
|
||||
self.ProgressBar.setValue(0)
|
||||
self.ProgressText.setText("正在下载驱动...")
|
||||
driver_info.driver_status = WebDriverStatus.DOWNLOADING # we set this only to update
|
||||
# the display, and we will set to not installed in the download thread
|
||||
self.updateDriverInfoDisplay(driver_info)
|
||||
self.updateProgressBarStates(driver_info)
|
||||
self.ProgressText.setText("准备开始下载...")
|
||||
self.updateButtonStates(driver_info)
|
||||
# set to not installed
|
||||
driver_info.driver_status = WebDriverStatus.NOT_INSTALLED
|
||||
self.__download_thread = DownloadWorker(self.__driver_manager, driver_info)
|
||||
self.__download_thread.progress.connect(self.onDownloadProgress)
|
||||
self.__download_thread.downloadFinished.connect(self.onDownloadFinished)
|
||||
@@ -371,18 +381,14 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self
|
||||
):
|
||||
|
||||
self.ProgressBar.setValue(100)
|
||||
self.ProgressText.setText("下载完成 !")
|
||||
self.StatusLabel.status = ALStatusLabel.Status.SUCCESS
|
||||
self.DriverComboBox.setEnabled(True)
|
||||
index = self.DriverComboBox.currentIndex()
|
||||
if 0 <= index < len(self.__driver_infos):
|
||||
driver_info = self.__driver_infos[index]
|
||||
driver_info.driver_status = WebDriverStatus.INSTALLED
|
||||
self.updateDriverInfoDisplay(driver_info)
|
||||
self.ConfirmButton.setEnabled(True)
|
||||
self.DownloadButton.setEnabled(False)
|
||||
self.RefreshButton.setEnabled(True)
|
||||
self.DriverComboBox.setEnabled(True)
|
||||
self.DeleteButton.setEnabled(True)
|
||||
self.updateProgressBarStates(driver_info)
|
||||
self.updateButtonStates(driver_info)
|
||||
|
||||
@Slot()
|
||||
def onDownloadError(
|
||||
@@ -390,12 +396,15 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
error_message: str
|
||||
):
|
||||
|
||||
self.StatusLabel.status = ALStatusLabel.Status.FAILURE
|
||||
QMessageBox.critical(self, "下载失败 - AutoLibrary", error_message)
|
||||
self.DownloadButton.setEnabled(True)
|
||||
self.RefreshButton.setEnabled(True)
|
||||
self.DriverComboBox.setEnabled(True)
|
||||
self.CancelButton.setEnabled(True)
|
||||
index = self.DriverComboBox.currentIndex()
|
||||
if 0 <= index < len(self.__driver_infos):
|
||||
driver_info = self.__driver_infos[index]
|
||||
driver_info.driver_status = WebDriverStatus.ERROR
|
||||
self.updateDriverInfoDisplay(driver_info)
|
||||
self.updateProgressBarStates(driver_info)
|
||||
self.updateButtonStates(driver_info)
|
||||
QMessageBox.critical(self, "下载失败 - AutoLibrary", error_message)
|
||||
|
||||
|
||||
@Slot()
|
||||
@@ -403,19 +412,16 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self
|
||||
):
|
||||
|
||||
self.DriverComboBox.setEnabled(True)
|
||||
index = self.DriverComboBox.currentIndex()
|
||||
if 0 <= index < len(self.__driver_infos):
|
||||
driver_info = self.__driver_infos[index]
|
||||
self.__driver_manager.cancelDriverDownload(driver_info)
|
||||
driver_info.driver_status = WebDriverStatus.NOT_INSTALLED
|
||||
self.updateDriverInfoDisplay(driver_info)
|
||||
self.ProgressText.setText("下载已取消")
|
||||
self.ProgressBar.setValue(0)
|
||||
self.StatusLabel.status = ALStatusLabel.Status.WAITING
|
||||
self.DownloadButton.setEnabled(True)
|
||||
self.RefreshButton.setEnabled(True)
|
||||
self.DriverComboBox.setEnabled(True)
|
||||
self.CancelButton.setEnabled(True)
|
||||
self.DeleteButton.setEnabled(False)
|
||||
self.updateProgressBarStates(driver_info)
|
||||
self.updateButtonStates(driver_info)
|
||||
self.ProgressText.setText("下载已取消")
|
||||
|
||||
|
||||
@Slot()
|
||||
@@ -427,7 +433,7 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
if index < 0 or index >= len(self.__driver_infos):
|
||||
return
|
||||
driver_info = self.__driver_infos[index]
|
||||
if driver_info.driver_status.name != "INSTALLED":
|
||||
if driver_info.driver_status != WebDriverStatus.INSTALLED:
|
||||
return
|
||||
self.__selected_driver_info = driver_info
|
||||
self.__confirmed = True
|
||||
@@ -510,27 +516,61 @@ class ALWebDriverDownloadDialog(QDialog):
|
||||
self.PathLabel.setText(str(driver_info.driver_path))
|
||||
else:
|
||||
self.PathLabel.setText("未安装")
|
||||
match driver_info.driver_status.name:
|
||||
case "NOT_INSTALLED":
|
||||
match driver_info.driver_status:
|
||||
case WebDriverStatus.NOT_INSTALLED:
|
||||
self.StatusLabel.status = ALStatusLabel.Status.WAITING
|
||||
case "INSTALLED":
|
||||
case WebDriverStatus.INSTALLED:
|
||||
self.StatusLabel.status = ALStatusLabel.Status.SUCCESS
|
||||
case "DOWNLOADING":
|
||||
case WebDriverStatus.DOWNLOADING:
|
||||
self.StatusLabel.status = ALStatusLabel.Status.RUNNING
|
||||
case "ERROR":
|
||||
case WebDriverStatus.ERROR:
|
||||
self.StatusLabel.status = ALStatusLabel.Status.FAILURE
|
||||
|
||||
|
||||
def updateProgressBarStates(
|
||||
self,
|
||||
driver_info: WebDriverInfo
|
||||
):
|
||||
|
||||
if driver_info.driver_status == WebDriverStatus.NOT_INSTALLED:
|
||||
self.ProgressBar.setValue(0)
|
||||
self.ProgressText.setText("未安装")
|
||||
elif driver_info.driver_status == WebDriverStatus.INSTALLED:
|
||||
self.ProgressBar.setValue(100)
|
||||
self.ProgressText.setText("已安装")
|
||||
elif driver_info.driver_status == WebDriverStatus.DOWNLOADING:
|
||||
pass # update by worker thread
|
||||
elif driver_info.driver_status == WebDriverStatus.ERROR:
|
||||
self.ProgressBar.setValue(0)
|
||||
self.ProgressText.setText("下载失败")
|
||||
|
||||
|
||||
def updateButtonStates(
|
||||
self,
|
||||
driver_info: WebDriverInfo
|
||||
):
|
||||
|
||||
if driver_info.driver_status.name == "INSTALLED":
|
||||
self.DownloadButton.setEnabled(False)
|
||||
self.DeleteButton.setEnabled(True)
|
||||
self.ConfirmButton.setEnabled(True)
|
||||
else:
|
||||
if driver_info.driver_status == WebDriverStatus.NOT_INSTALLED:
|
||||
self.RefreshButton.setEnabled(True)
|
||||
self.DeleteButton.setEnabled(False)
|
||||
self.DownloadButton.setEnabled(True)
|
||||
self.CancelButton.setEnabled(True)
|
||||
self.ConfirmButton.setEnabled(False)
|
||||
elif driver_info.driver_status == WebDriverStatus.INSTALLED:
|
||||
self.RefreshButton.setEnabled(True)
|
||||
self.DownloadButton.setEnabled(False)
|
||||
self.DeleteButton.setEnabled(True)
|
||||
self.CancelButton.setEnabled(True)
|
||||
self.ConfirmButton.setEnabled(True)
|
||||
elif driver_info.driver_status == WebDriverStatus.DOWNLOADING:
|
||||
self.RefreshButton.setEnabled(False)
|
||||
self.DownloadButton.setEnabled(False)
|
||||
self.DeleteButton.setEnabled(False)
|
||||
self.CancelButton.setEnabled(True)
|
||||
self.ConfirmButton.setEnabled(False)
|
||||
elif driver_info.driver_status == WebDriverStatus.ERROR:
|
||||
self.RefreshButton.setEnabled(True)
|
||||
self.DownloadButton.setEnabled(True)
|
||||
self.DeleteButton.setEnabled(False)
|
||||
self.CancelButton.setEnabled(True)
|
||||
self.ConfirmButton.setEnabled(False)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import platform
|
||||
import installed_browsers
|
||||
import browsers
|
||||
|
||||
from pathlib import Path
|
||||
from enum import Enum
|
||||
@@ -128,7 +128,7 @@ class WebBrowserDetector:
|
||||
|
||||
self.browser_infos = []
|
||||
try:
|
||||
all_browsers = installed_browsers.browsers()
|
||||
all_browsers = list(browsers.browsers())
|
||||
except Exception as e:
|
||||
self.browser_infos = []
|
||||
return self.browser_infos
|
||||
@@ -140,14 +140,14 @@ class WebBrowserDetector:
|
||||
'msedge': WebBrowserType.EDGE,
|
||||
}
|
||||
for browser in all_browsers:
|
||||
internal_name = browser.get('name', '').lower()
|
||||
internal_name = browser.get("browser_type", "").lower()
|
||||
if internal_name not in type_map:
|
||||
continue # Not one of the browsers we care about
|
||||
version = browser.get('version')
|
||||
version = browser.get("version", "")
|
||||
if not version:
|
||||
# Skip browsers with no version info (unlikely, but defensive)
|
||||
continue
|
||||
exe_path = browser.get('location')
|
||||
exe_path = browser.get("path", "")
|
||||
if not exe_path:
|
||||
continue
|
||||
try:
|
||||
@@ -163,4 +163,13 @@ class WebBrowserDetector:
|
||||
browser_path=path,
|
||||
)
|
||||
self.browser_infos.append(info)
|
||||
# Deduplicate: keep only one entry per (type, version)
|
||||
seen = set()
|
||||
unique = []
|
||||
for info in self.browser_infos:
|
||||
key = (info.browser_type, info.browser_version)
|
||||
if key not in seen:
|
||||
seen.add(key)
|
||||
unique.append(info)
|
||||
self.browser_infos = unique
|
||||
return self.browser_infos
|
||||
@@ -24,7 +24,7 @@ from managers.driver.WebDriverDownloader import (
|
||||
)
|
||||
|
||||
|
||||
class DriverStatus(Enum):
|
||||
class WebDriverStatus(Enum):
|
||||
"""
|
||||
Web driver status.
|
||||
"""
|
||||
@@ -57,7 +57,7 @@ class WebDriverInfo:
|
||||
self.driver_version = ""
|
||||
self.browser_version = ""
|
||||
self.driver_path: Optional[Path] = None
|
||||
self.driver_status = DriverStatus.NOT_INSTALLED
|
||||
self.driver_status = WebDriverStatus.NOT_INSTALLED
|
||||
|
||||
|
||||
class WebDriverManager:
|
||||
@@ -115,7 +115,7 @@ class WebDriverManager:
|
||||
driver_path = self._getDriverPath(driver_info)
|
||||
if driver_path and driver_path.exists() and driver_path.is_file():
|
||||
driver_info.driver_path = driver_path
|
||||
driver_info.driver_status = DriverStatus.INSTALLED
|
||||
driver_info.driver_status = WebDriverStatus.INSTALLED
|
||||
|
||||
|
||||
def _mapWebBrowserTypeToDriver(
|
||||
@@ -321,7 +321,7 @@ class WebDriverManager:
|
||||
driver_info: WebDriverInfo
|
||||
) -> Optional[Path]:
|
||||
|
||||
if driver_info and driver_info.driver_status == DriverStatus.INSTALLED:
|
||||
if driver_info and driver_info.driver_status == WebDriverStatus.INSTALLED:
|
||||
return driver_info.driver_path
|
||||
return None
|
||||
|
||||
@@ -339,7 +339,7 @@ class WebDriverManager:
|
||||
progress_callback(0, 0, 0, "未找到浏览器信息")
|
||||
else:
|
||||
raise ValueError("未找到浏览器信息")
|
||||
if driver_info and driver_info.driver_status == DriverStatus.DOWNLOADING:
|
||||
if driver_info and driver_info.driver_status == WebDriverStatus.DOWNLOADING:
|
||||
if progress_callback:
|
||||
progress_callback(0, 0, 0, f"{driver_info.driver_type} 驱动正在下载中")
|
||||
else:
|
||||
@@ -375,19 +375,19 @@ class WebDriverManager:
|
||||
else:
|
||||
raise ValueError(f"不支持的 Web Driver 类型")
|
||||
with self.__lock:
|
||||
driver_info.driver_status = DriverStatus.DOWNLOADING
|
||||
driver_info.driver_status = WebDriverStatus.DOWNLOADING
|
||||
driver_path = downloader.download(progress_callback=progress_callback, cancel_event=cancel_event)
|
||||
with self.__lock:
|
||||
if driver_path:
|
||||
driver_info.driver_path = driver_path
|
||||
driver_info.driver_version = driver_version
|
||||
driver_info.driver_status = DriverStatus.INSTALLED
|
||||
driver_info.driver_status = WebDriverStatus.INSTALLED
|
||||
else:
|
||||
driver_info.driver_status = DriverStatus.ERROR
|
||||
driver_info.driver_status = WebDriverStatus.ERROR
|
||||
return driver_path
|
||||
except Exception as e:
|
||||
with self.__lock:
|
||||
driver_info.driver_status = DriverStatus.ERROR
|
||||
driver_info.driver_status = WebDriverStatus.ERROR
|
||||
raise e
|
||||
|
||||
|
||||
@@ -406,7 +406,7 @@ class WebDriverManager:
|
||||
shutil.rmtree(download_dir, ignore_errors=True)
|
||||
with self.__lock:
|
||||
driver_info.driver_path = None
|
||||
driver_info.driver_status = DriverStatus.NOT_INSTALLED
|
||||
driver_info.driver_status = WebDriverStatus.NOT_INSTALLED
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
@@ -424,7 +424,7 @@ class WebDriverManager:
|
||||
progress_callback(0, 0, 0, "未找到浏览器信息")
|
||||
else:
|
||||
raise ValueError("未找到浏览器信息")
|
||||
if driver_info.driver_status != DriverStatus.INSTALLED:
|
||||
if driver_info.driver_status != WebDriverStatus.INSTALLED:
|
||||
if progress_callback:
|
||||
progress_callback(0, 0, 0, f"{driver_info.driver_type} 驱动未安装")
|
||||
else:
|
||||
@@ -434,11 +434,11 @@ class WebDriverManager:
|
||||
driver_path.unlink()
|
||||
with self.__lock:
|
||||
driver_info.driver_path = None
|
||||
driver_info.driver_status = DriverStatus.NOT_INSTALLED
|
||||
driver_info.driver_status = WebDriverStatus.NOT_INSTALLED
|
||||
return True
|
||||
except Exception:
|
||||
with self.__lock:
|
||||
driver_info.driver_status = DriverStatus.ERROR
|
||||
driver_info.driver_status = WebDriverStatus.ERROR
|
||||
raise
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user