docs: add v1.4.0 manual with macOS support, AutoScript, and global settings

- Add v1.4.0 version manual with full structure (开始/安装/配置/设置/功能/FAQ)
- Add macOS platform installation instructions and troubleshooting
- Add global settings chapter (open + appearance pages)
- Add AutoScript manual (syntax, functions, variables, editor, orchestrator, integration)
- Remove changelog (zh/changelog) as per v1.4.0 scope
- Update docs.json navigation for v1.4.0 version and AutoScript tab

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KenanZhuandClaude committed 2026-06-14 21:22:58 +08:00
1 parent c13da9f2f5
commit 552f21ef8f
23 files changed
+2158 -38

No files matched your search

+88 -3
View File
@@ -20,6 +20,61 @@
{ {
"tab": "用户手册", "tab": "用户手册",
"versions": [ "versions": [
{
"version": "v1.4.0",
"groups": [
{
"group": "开始",
"icon": "book-open",
"pages": [
"zh/manual/v1.4.0/index/intro",
"zh/manual/v1.4.0/index/beforestart"
]
},
{
"group": "安装",
"icon": "download",
"pages": [
"zh/manual/v1.4.0/installation/install",
"zh/manual/v1.4.0/installation/driver"
]
},
{
"group": "配置",
"icon": "sliders",
"pages": [
"zh/manual/v1.4.0/configuration/start",
"zh/manual/v1.4.0/configuration/ui",
"zh/manual/v1.4.0/configuration/file"
]
},
{
"group": "设置",
"icon": "tools",
"pages": [
"zh/manual/v1.4.0/global-settings/start",
"zh/manual/v1.4.0/global-settings/appearance"
]
},
{
"group": "功能",
"icon": "bolt",
"pages": [
"zh/manual/v1.4.0/features/core",
"zh/manual/v1.4.0/features/timer"
]
},
{
"group": "FAQ",
"icon": "circle-question",
"pages": [
"zh/manual/v1.4.0/faq/troubleshooting",
"zh/manual/v1.4.0/faq/faq",
"zh/manual/v1.4.0/faq/contact"
]
}
]
},
{ {
"version": "v1.3.0", "version": "v1.3.0",
"groups": [ "groups": [
@@ -70,9 +125,39 @@
] ]
}, },
{ {
"tab": "更新日志", "tab": "AutoScript",
"pages": [ "groups": [
"zh/changelog/overview" {
"group": "概述",
"icon": "book-open",
"pages": [
"zh/autoscript/index"
]
},
{
"group": "语法指引",
"icon": "code",
"pages": [
"zh/autoscript/syntax",
"zh/autoscript/functions",
"zh/autoscript/variables"
]
},
{
"group": "工具使用",
"icon": "pencil",
"pages": [
"zh/autoscript/editor",
"zh/autoscript/orchestrator"
]
},
{
"group": "集成",
"icon": "link",
"pages": [
"zh/autoscript/integration"
]
}
] ]
} }
] ]
+104
View File
@@ -0,0 +1,104 @@
---
title: "代码编辑器"
description: "AutoScript 代码编辑器使用指南 - 语法高亮、代码模板与调试运行"
---
AutoScript 代码编辑器提供完整的 Lua 脚本编写体验,包括语法高亮、代码模板插入和模拟调试功能。
## 打开编辑器
在定时任务管理窗口中添加或编辑任务时,点击 [**AutoScript**] 区域的编辑按钮即可打开代码编辑器。
{/* TODO: 添加代码编辑器界面截图 */}
![AutoScript 代码编辑器](/images/v1.4.0/autoscript-editor.png)
## 语法高亮
编辑器使用配色方案区分不同类型的代码元素,帮助你快速识别脚本结构:
| 颜色 | 元素类型 | 示例 |
| --- | --- | --- |
| 蓝色加粗 | 关键字 | `if` `elseif` `else` `then` `end` `and` `or` `not` |
| 青色 | 布尔字面量 | `true` `false` |
| 紫色 | 运算符 | `==` `~=` `>` `<` `>=` `<=` `+` `-` |
| 黄色 | 工具函数 | `time()` `date()` `datenow()` `timenow()` `dateadd()` `timeadd()` |
| 浅蓝 | 目标变量 | `USERNAME` `USER_ENABLE` `RESERVE_DATE` `RESERVE_BEGIN_TIME` `RESERVE_END_TIME` |
| 橙色 | 字符串 | `"2025-10-30"` `"alice"` |
| 绿色 | 数字 | `1` `60` `2025` |
| 绿色斜体 | 注释 | `-- 这是一条注释` |
## 代码模板
编辑器底部工具栏按类别提供了代码模板按钮,点击即可在光标位置插入相应代码:
### 基本语法
| 按钮 | 插入内容 |
| --- | --- |
| `if` | `if then` + `end` 代码块 |
| `elseif` | `elseif then` 语句 |
| `else` | `else` 语句 |
| `end` | `end` 关键字 |
| `pass` | 空操作占位符 |
### 运算符
提供算术运算符(`+` `-`)、比较运算符(`==` `~=` `>` `<` `>=` `<=`)和逻辑运算符(`and` `or`)的快速插入。
### 字面量
提供 `true` / `false` 和日期/时间/字符串/数字/注释的模板代码。
### 变量
自动列出所有可操作的目标变量。点击按钮即可插入变量名,无需手动输入。
### 工具函数
提供 `datenow()`、`timenow()`、`dateadd()`、`timeadd()` 等函数的模板插入,并附带参数提示。
## 编辑功能
- **Tab 转空格**:按下 Tab 键自动插入 4 个空格
- **字体缩放**:通过工具栏按钮放大或缩小编辑器字体
- **复制到剪贴板**:将当前脚本内容复制到系统剪贴板
## 调试运行
编辑器的右侧面板提供模拟数据调试功能:
<Steps>
<Step title="设置模拟数据">
在右侧面板中为每个变量设置测试值。各类型变量使用对应的输入控件:
- 字符串:文本输入框
- 布尔值:下拉选择框
- 日期:日期选择器
- 时间:时间选择器
</Step>
<Step title="运行调试">
点击 [**调试运行**] 按钮,脚本将在模拟数据上执行。
</Step>
<Step title="查看结果">
执行完成后,弹出结果对话框,对比显示每个变量的修改前值和修改后值。
{/*
TODO: 添加调试运行结果截图
![AutoScript 调试运行结果](/images/v1.4.0/autoscript-debug-result.png)
*/}
</Step>
</Steps>
<Tip>
在将脚本配置到定时任务之前,建议先使用调试运行功能验证脚本逻辑是否正确,
特别是验证变量的最终值是否符合预期。
</Tip>
## 从编排器导入
如果你通过可视化编排器构建了脚本逻辑,可以点击 [**编排**] 按钮打开编排器,
编排器生成的代码将插入到编辑器光标所在位置。
<Note>
你可以在编排器中构建基本逻辑框架,然后在编辑器中手动调整细节,
两种方式可以灵活结合使用。
</Note>
+235
View File
@@ -0,0 +1,235 @@
---
title: "函数参考"
description: "AutoScript 内置工具函数完整参考 - 日期与时间处理"
---
AutoScript 提供了一组内置的日期和时间工具函数,用于在脚本中处理动态时间计算。
## 日期函数
### `date(y, m, d)`
创建一个指定日历日期的值。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `y` | integer | 年份,如 `2025` |
| `m` | integer | 月份,如 `10` |
| `d` | integer | 日期,如 `30` |
**返回值:** 日期值(可赋值给日期类型变量)
**示例:**
```lua
-- 设置为 2025 年 10 月 30 日
RESERVE_DATE = date(2025, 10, 30)
```
---
### `datenow()`
获取当前日期(当天的 00:00:00)。
**返回值:** 当前日期值
**示例:**
```lua
-- 将预约日期设为今天
RESERVE_DATE = datenow()
```
---
### `dateadd(date_val, n)`
在指定日期上增加或减少天数。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `date_val` | date | 基准日期值 |
| `n` | integer | 增加的天数(负数表示减少) |
**返回值:** 计算后的日期值
**示例:**
```lua
-- 预约明天
RESERVE_DATE = dateadd(datenow(), 1)
-- 预约三天前
RESERVE_DATE = dateadd(datenow(), -3)
-- 在已有日期基础上计算
RESERVE_DATE = dateadd(RESERVE_DATE, 7) -- 延后一周
```
---
### `strtodate(iso_str)`
将 ISO 格式日期字符串转换为日期值。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `iso_str` | string | 日期字符串,格式 `"YYYY-MM-DD"` |
**返回值:** 日期值
**示例:**
```lua
RESERVE_DATE = strtodate("2025-12-31")
```
---
### `datetostr(ts)`
将日期值转换为 ISO 格式字符串。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `ts` | date | 日期值 |
**返回值:** 格式为 `"YYYY-MM-DD"` 的字符串
<Note>
`datetostr()` 通常用于调试或日志输出。在实际操作中直接使用日期值即可。
</Note>
---
## 时间函数
### `time(h, m)`
创建一个指定时间值。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `h` | integer | 小时(0-23) |
| `m` | integer | 分钟(0-59) |
**返回值:** 时间值(可赋值给时间类型变量)
**示例:**
```lua
-- 设置开始时间为 09:30
RESERVE_BEGIN_TIME = time(9, 30)
-- 设置结束时间为 21:00
RESERVE_END_TIME = time(21, 0)
```
---
### `timenow()`
获取当前时间(以分钟表示的当天已过时间)。
**返回值:** 当前时间值(分钟数)
**示例:**
```lua
-- 将开始时间设为当前时间后 30 分钟
RESERVE_BEGIN_TIME = timeadd(timenow(), 30)
```
---
### `timeadd(time_val, n)`
在指定时间上增加或减少分钟数。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `time_val` | time | 基准时间值 |
| `n` | integer | 增加的分钟数(负数表示减少) |
**返回值:** 计算后的时间值(自动处理跨天回绕)
**示例:**
```lua
-- 开始时间推迟 30 分钟
RESERVE_BEGIN_TIME = timeadd(RESERVE_BEGIN_TIME, 30)
-- 结束时间提前 1 小时
RESERVE_END_TIME = timeadd(RESERVE_END_TIME, -60)
-- 在现有时间基础上叠加
RESERVE_BEGIN_TIME = timeadd(timenow(), 120) -- 当前时间 + 2 小时
```
---
### `strtotime(hm_str)`
将时间字符串转换为时间值。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `hm_str` | string | 时间字符串,格式 `"HH:MM"` |
**返回值:** 时间值
**示例:**
```lua
RESERVE_BEGIN_TIME = strtotime("08:00")
```
---
### `timetostr(m)`
将时间值转换为字符串。
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `m` | time | 时间值(分钟数) |
**返回值:** 格式为 `"HH:MM"` 的字符串
<Note>
`timetostr()` 通常用于调试或日志输出。在实际操作中直接使用时间值即可。
</Note>
---
## 函数速查表
| 函数 | 说明 | 输入 | 输出 |
| --- | --- | --- | --- |
| `date(y, m, d)` | 创建日期 | `(int, int, int)` | date |
| `datenow()` | 当前日期 | 无 | date |
| `dateadd(d, n)` | 日期偏移 | `(date, int)` | date |
| `strtodate(s)` | 字符串转日期 | `(string)` | date |
| `datetostr(d)` | 日期转字符串 | `(date)` | string |
| `time(h, m)` | 创建时间 | `(int, int)` | time |
| `timenow()` | 当前时间 | 无 | time |
| `timeadd(t, n)` | 时间偏移 | `(time, int)` | time |
| `strtotime(s)` | 字符串转时间 | `(string)` | time |
| `timetostr(t)` | 时间转字符串 | `(time)` | string |
+83
View File
@@ -0,0 +1,83 @@
---
title: "AutoScript 概述"
description: "AutoScript 自动化脚本引擎 - 在定时任务执行前动态调整预约参数"
---
AutoScript 是基于 Lua 语言的自动化脚本引擎,用于在定时任务执行前对预约参数进行动态调整。
## 什么是 AutoScript
在之前的版本中,定时任务只能按照固定的预约参数执行。如果需要在不同日期预约不同座位,或根据时间动态调整预约时长,只能手动修改配置。
AutoScript 解决了这一问题。它允许你编写简单的脚本,在定时任务执行前自动修改用户变量(如预约日期、开始时间、结束时间等),实现灵活的自动化预约策略。
## 核心概念
AutoScript 的核心工作流程如下:
1. **输入数据**:定时任务触发时,从用户配置中读取当前用户的预约参数
2. **执行脚本**:运行你编写的 AutoScript 脚本,动态修改变量值
3. **输出数据**:将脚本修改后的参数传递给自动化引擎执行
<Note>
AutoScript 脚本修改的参数仅影响当次执行,不会回写到用户配置文件。下次任务运行时将重新从配置文件读取原始值。
</Note>
## 典型应用场景
- **每日动态日期**:始终预约"明天"的座位,无需每天手动修改日期
- **条件切换**:根据是否启用标志决定不同的预约策略
- **时间偏移**:在特定时间段自动调整预约开始时间
- **批量处理**:配合用户分组,为不同用户设置不同的预约参数
## 快速示例
以下脚本将预约日期设为明天,开始时间设为上午 9:00:
```lua
-- 设置预约日期为明天
RESERVE_DATE = dateadd(datenow(), 1)
-- 设置开始时间为 09:00
RESERVE_BEGIN_TIME = time(9, 0)
```
## 两种使用方式
AutoLibrary 提供两种方式编写 AutoScript:
| 方式 | 说明 | 适合人群 |
| --- | --- | --- |
| [**代码编辑器**](/zh/autoscript/editor) | 直接编写 Lua 脚本,提供语法高亮和调试功能 | 熟悉脚本编写的用户 |
| [**可视化编排器**](/zh/autoscript/orchestrator) | 通过图形界面拖拽组合条件和操作,自动生成脚本 | 不熟悉编程的用户 |
<CardGroup cols={2}>
<Card
title="语法指引"
icon="code"
href="/zh/autoscript/syntax"
>
了解 AutoScript 的 Lua 语法基础、运算符和流程控制。
</Card>
<Card
title="函数参考"
icon="function-square"
href="/zh/autoscript/functions"
>
查看所有可用的日期、时间工具函数及其用法。
</Card>
<Card
title="变量参考"
icon="database"
href="/zh/autoscript/variables"
>
了解可操作的目标变量、数据类型与约束规则。
</Card>
<Card
title="集成指南"
icon="link"
href="/zh/autoscript/integration"
>
了解如何将 AutoScript 集成到定时任务中。
</Card>
</CardGroup>
+137
View File
@@ -0,0 +1,137 @@
---
title: "集成指南"
description: "AutoScript 与定时任务集成 - 执行流程、作用域与最佳实践"
---
了解如何将 AutoScript 脚本集成到定时任务中,以及脚本的执行时机、作用范围和注意事项。
## 执行流程
当定时任务触发时,AutoLibrary 按以下顺序执行:
1. **读取配置**:从用户配置文件中读取所有用户分组的预约参数
2. **遍历用户组**:对每个启用的用户组,遍历其中的每个启用用户
3. **执行 AutoScript**:对每个用户运行 AutoScript 脚本,动态调整变量值
4. **执行定时任务**:使用调整后的参数运行预约/签到/续约操作
```text
定时任务触发
│
├─ 用户组 A
│ ├─ 用户 1 → 执行 AutoScript → 预约/签到/续约
│ └─ 用户 2 → 执行 AutoScript → 预约/签到/续约
│
└─ 用户组 B
├─ 用户 3 → 执行 AutoScript → 预约/签到/续约
└─ 用户 4 → 执行 AutoScript → 预约/签到/续约
```
## 作用域
AutoScript 脚本的作用域限定为单个用户的单次执行:
- **每次执行独立**:脚本对每个用户独立运行,不同用户之间互不影响
- **不修改配置文件**:脚本对变量的修改仅存在于内存中,不会回写到 `user.json`
- **下次执行重置**:下次定时任务触发时,从配置文件重新读取原始值
## 配置方式
### 在定时任务中指定脚本
<Steps>
<Step title="打开定时任务管理">
点击主界面底部的 [<Icon icon="clock" />] 按钮。
</Step>
<Step title="添加或编辑任务">
点击 [**添加任务**] 创建新任务,或右键现有任务选择 [**编辑**]。
</Step>
<Step title="配置 AutoScript">
在编辑对话框中找到 [**AutoScript**] 区域,点击 [**编辑**] 按钮打开内置代码编辑器编写脚本。
脚本编写完成后直接内嵌保存至定时任务配置,无需管理外部文件。
</Step>
<Step title="保存配置">
点击 [**确认**] 保存任务配置。
</Step>
</Steps>
{/* TODO: 添加定时任务 AutoScript 配置截图 */}
![定时任务 AutoScript 配置](/images/v1.4.0/timer-autoscript-config.png)
## 典型示例
### 示例 1:始终预约明天的座位
```lua
-- 将预约日期设为明天
RESERVE_DATE = dateadd(datenow(), 1)
-- 设置固定时间段
RESERVE_BEGIN_TIME = time(9, 0)
RESERVE_END_TIME = time(21, 0)
```
### 示例 2:根据星期调整预约策略
配合定时任务的重复执行功能,可以为不同日子设置不同的预约参数。如果你需要基于实际星期进行判断,可以在脚本中根据日期特性调整:
```lua
-- 始终预约明天
RESERVE_DATE = dateadd(datenow(), 1)
-- 默认时间段
RESERVE_BEGIN_TIME = time(9, 0)
RESERVE_END_TIME = time(21, 0)
```
### 示例 3:条件性跳过用户
```lua
-- 如果当前时间已经超过上午 10 点,跳过该用户
if timenow() > time(10, 0) then
USER_ENABLE = false
end
```
### 示例 4:根据用户名差异化配置
```lua
if USERNAME == "20250101001" then
-- 用户 A 的预约策略
RESERVE_BEGIN_TIME = time(8, 0)
RESERVE_END_TIME = time(20, 0)
end
```
## 最佳实践
### 先调试,后配置
在将脚本关联到定时任务之前,使用编辑器的调试运行功能在模拟数据上验证脚本逻辑。
### 保持脚本简洁
每个脚本只关注一个明确的目标,避免在一个脚本中处理过多复杂逻辑。如果需要针对不同用户组执行不同逻辑,建议为每个用户组创建独立的定时任务。
### 注意沙箱限制
AutoScript 运行在受限的沙箱环境中,不能访问文件系统或执行系统命令。如果脚本需要外部数据(如个人日程表),请使用条件判断和工具函数实现。
### 验证类型兼容性
确保所有赋值操作的类型与目标变量声明的类型一致。类型错误会导致脚本执行失败并跳过该用户。
### 处理边缘情况
编写脚本时考虑边缘情况:
```lua
-- 确保开始时间不早于 7:30
if RESERVE_BEGIN_TIME < time(7, 30) then
RESERVE_BEGIN_TIME = time(7, 30)
end
-- 确保结束时间不晚于 22:30
if RESERVE_END_TIME > time(22, 30) then
RESERVE_END_TIME = time(22, 30)
end
```
+105
View File
@@ -0,0 +1,105 @@
---
title: "可视化编排器"
description: "AutoScript 可视化编排器 - 通过图形界面构建条件判断与变量操作,无需手写代码"
---
可视化编排器让你通过图形界面构建 AutoScript 脚本,无需了解 Lua 语法。编排器会根据你的配置自动生成代码。
{/* TODO: 添加可视化编排器界面截图 */}
![AutoScript 可视化编排器](/images/v1.4.0/autoscript-orchestrator.png)
## 编排器结构
编排器由多个判断块(Conditional Block)堆叠组成,从上到下依次执行。每个判断块包含条件判断和操作步骤两部分。
### 判断块类型
每个判断块可以设置为以下三种类型之一:
| 类型 | 触发条件 | 说明 |
| --- | --- | --- |
| **IF** | 第一个判断块 | 始终为 IF,不可更改 |
| **ELSE IF** | 上方条件均不满足 | 添加额外的条件分支 |
| **ELSE** | 上方所有条件均不满足 | 默认分支,不需要设置条件 |
<Info>
在一个 IF 后可以添加多个 ELSE IF,但只能有一个 ELSE 块。
添加 ELSE 块后,不能再添加 ELSE IF 或 ELSE 块。
</Info>
## 添加判断块
点击 [**+ 添加判断块**] 按钮添加新的判断块。新块的类型默认为 ELSE IF。
## 配置条件
每个判断块可包含一个或多个条件行,多个条件之间用 `and` 或 `or` 连接。
### 条件行配置项
| 配置项 | 说明 |
| --- | --- |
| 逻辑运算符 | 与上一条件行的关系:`and`(且)或 `or`(或)。第一行不显示此选项 |
| 左变量 | 选择要比较的目标变量,或直接使用 `true`/`false` 布尔值 |
| 比较运算符 | `==` `~=` `>` `<` `>=` `<=` |
| 比较方式 | 与固定值比较 / 与另一个变量比较 |
| 右值 | 根据变量类型提供对应的输入控件 |
### 特殊规则
- **布尔变量**:当左侧选择布尔类型变量(如 `USER_ENABLE`)时,比较运算符和右值自动隐藏,
条件直接判断该布尔值是否为真
- 可以点击 [**+**] 按钮添加更多条件行,或点击 [**x**] 按钮删除某个条件行
## 配置操作步骤
每个判断块内可包含一个或多个操作步骤(Action Step),当该块的条件满足时,所有操作步骤按顺序执行。
### 操作类型
| 操作 | 说明 | 示例 |
| --- | --- | --- |
| **set** | 将变量设置为指定值 | `RESERVE_DATE = dateadd(datenow(), 1)` |
| **add** | 在变量当前值上增加 | `RESERVE_BEGIN_TIME = RESERVE_BEGIN_TIME + 30` |
| **sub** | 在变量当前值上减去 | `RESERVE_END_TIME = RESERVE_END_TIME - 60` |
### 值来源
| 来源 | 说明 |
| --- | --- |
| 固定值 | 手动输入或选择具体值 |
| 变量 | 从其他目标变量读取值 |
### 日期和时间特殊处理
对于日期和时间类型变量,输入控件提供以下便捷选项:
| 变量类型 | 便捷选项 |
| --- | --- |
| Date | 今天、明天、后天、指定日期(日历选择器) |
| Time | 当前时间、指定时间(时间选择器) |
<Note>
当选择相对日期选项(如"明天")时,编排器会生成相应的工具函数调用(如 `dateadd(datenow(), 1)`),
确保脚本在运行时动态计算正确的日期。
</Note>
## 生成代码
配置完成后,点击 [**确认**] 按钮,编排器将把所有判断块转换为 Lua 代码并插入到代码编辑器中。
例如,以下编排配置:
- IF `USER_ENABLE` → set `RESERVE_DATE` 为明天,set `RESERVE_BEGIN_TIME` 为 09:00
- ELSE → set `USER_ENABLE` 为 false
将生成:
```lua
if USER_ENABLE then
RESERVE_DATE = dateadd(datenow(), 1)
RESERVE_BEGIN_TIME = time(9, 0)
else
USER_ENABLE = false
end
```
+149
View File
@@ -0,0 +1,149 @@
---
title: "语法指引"
description: "AutoScript Lua 语法指南 - 变量、运算符、条件判断与注释"
---
AutoScript 使用 Lua 5.4 作为脚本语言。本页介绍编写 AutoScript 所需的 Lua 基础语法。
## 注释
使用 `--` 开头编写单行注释:
```lua
-- 这是一条注释
RESERVE_DATE = dateadd(datenow(), 1) -- 这也是一条行内注释
```
<Info>
AutoScript 仅支持单行注释(`--`),不支持 Lua 的多行注释(`--[[ ]]`)。
</Info>
## 变量赋值
使用 `=` 进行变量赋值。可操作的目标变量请参见[变量参考](/zh/autoscript/variables)。
```lua
USERNAME = "alice"
USER_ENABLE = true
RESERVE_DATE = date(2025, 10, 30)
RESERVE_BEGIN_TIME = time(9, 0)
RESERVE_END_TIME = time(21, 30)
```
<Warning>
赋值必须保持变量原有的类型。例如,不能将字符串赋值给日期类型的变量,也不能将布尔值赋值给整数类型。类型错误会在脚本执行时报错。
</Warning>
## 算术运算
支持基本的算术运算,可用于数值和日期/时间变量的计算:
```lua
-- 数值运算
RESERVE_BEGIN_TIME = RESERVE_BEGIN_TIME + 60 -- 开始时间推迟 60 分钟
RESERVE_END_TIME = RESERVE_END_TIME - 30 -- 结束时间提前 30 分钟
-- 日期运算(使用工具函数)
RESERVE_DATE = dateadd(RESERVE_DATE, 1) -- 日期延后 1 天
RESERVE_DATE = dateadd(RESERVE_DATE, -3) -- 日期提前 3 天
```
<Note>
对于日期和时间的加减,推荐使用 `dateadd()` 和 `timeadd()` 函数。直接使用 `+` `-` 进行日期运算可能导致结果含义不明确。
</Note>
## 条件判断
使用 `if` / `elseif` / `else` 结构进行条件判断。每个 `if` 块必须以 `end` 结尾:
```lua
if USER_ENABLE then
-- 用户启用时执行
RESERVE_DATE = dateadd(datenow(), 1)
end
```
```lua
if RESERVE_BEGIN_TIME < time(8, 0) then
RESERVE_BEGIN_TIME = time(8, 0)
else
RESERVE_BEGIN_TIME = time(9, 0)
end
```
多条件判断:
```lua
if RESERVE_BEGIN_TIME < time(8, 0) then
RESERVE_BEGIN_TIME = time(8, 0)
elseif RESERVE_BEGIN_TIME > time(22, 0) then
RESERVE_BEGIN_TIME = time(22, 0)
else
RESERVE_BEGIN_TIME = RESERVE_BEGIN_TIME
end
```
## 比较运算符
| 运算符 | 说明 | 示例 |
| --- | --- | --- |
| `==` | 等于 | `USERNAME == "alice"` |
| `~=` | 不等于 | `USER_ENABLE ~= false` |
| `>` | 大于 | `RESERVE_BEGIN_TIME > time(9, 0)` |
| `<` | 小于 | `RESERVE_END_TIME < time(22, 0)` |
| `>=` | 大于等于 | `RESERVE_BEGIN_TIME >= time(7, 30)` |
| `<=` | 小于等于 | `RESERVE_END_TIME <= time(23, 0)` |
## 逻辑运算符
| 运算符 | 说明 | 示例 |
| --- | --- | --- |
| `and` | 逻辑与 | `USER_ENABLE and RESERVE_BEGIN_TIME < time(12, 0)` |
| `or` | 逻辑或 | `USERNAME == "alice" or USERNAME == "bob"` |
| `not` | 逻辑非 | `not USER_ENABLE` |
## 布尔变量判断
对于布尔类型的变量(如 `USER_ENABLE`),可以直接作为条件使用,无需显式比较:
```lua
-- 推荐写法
if USER_ENABLE then
...
end
-- 等价但不推荐
if USER_ENABLE == true then
...
end
```
## 字符串
字符串使用双引号包裹:
```lua
USERNAME = "20250101001"
```
<Note>
AutoScript 不支持字符串拼接(`..` 运算符)。字符串变量只能通过直接赋值修改。
</Note>
## 关键字
以下是 AutoScript 中可用的 Lua 关键字:
`if` `elseif` `else` `then` `end` `and` `or` `not` `true` `false`
以下 Lua 标准功能出于安全考虑**不可用**:
- 文件 I/O(`io` 模块)
- 模块加载(`require`、`dofile`、`loadfile`)
- 系统命令执行(`os.execute`、`os.exit`)
- 调试功能(`debug` 模块)
- 循环语句(`for`、`while`)
<Info>
出于安全沙箱限制,AutoScript 不支持循环语句。如果你需要为多个用户设置不同参数,建议使用用户分组功能,配合条件判断实现差异化配置。
</Info>
+120
View File
@@ -0,0 +1,120 @@
---
title: "变量参考"
description: "AutoScript 可操作的目标变量完整参考 - 数据类型与映射关系"
---
AutoScript 通过操作一组预定义的变量来调整预约参数。每个变量有固定的数据类型,赋值时必须保持类型一致。
## 变量列表
| 显示名称 | Lua 变量名 | 类型 | 说明 |
| --- | --- | --- | --- |
| 用户名 | `USERNAME` | String | 用户的学号 |
| 用户启用 | `USER_ENABLE` | Boolean | 是否启用该用户 |
| 预约日期 | `RESERVE_DATE` | Date | 座位预约日期 |
| 预约开始时间 | `RESERVE_BEGIN_TIME` | Time | 预约开始时间 |
| 预约结束时间 | `RESERVE_END_TIME` | Time | 预约结束时间 |
<Note>
变量名区分大小写。`USERNAME`、`username` 和 `UserName` 是三个不同的标识符。
请始终使用全大写变量名。
</Note>
## 数据类型
### String(字符串)
文本类型,用于表示学号。
```lua
USERNAME = "20250101001"
```
限制:
- 只能通过直接赋值修改
- 不支持字符串拼接
### Boolean(布尔)
真/假值,用于控制用户是否被处理。
```lua
USER_ENABLE = true -- 启用用户
USER_ENABLE = false -- 跳过用户
-- 可直接作为条件判断
if USER_ENABLE then
-- 用户启用时执行
end
```
### Date(日期)
日期值,在 Lua 内部以数值形式存储(Unix 时间戳),在配置文件中以 `"YYYY-MM-DD"` 字符串形式存储。
```lua
-- 使用工具函数创建日期
RESERVE_DATE = date(2025, 10, 30) -- 绝对日期
RESERVE_DATE = datenow() -- 今天
RESERVE_DATE = dateadd(datenow(), 1) -- 明天
RESERVE_DATE = strtodate("2025-12-31") -- 从字符串解析
```
<Warning>
不要直接对日期变量使用算术运算(如 `RESERVE_DATE + 86400`)。
请使用 `dateadd()` 函数。
</Warning>
### Time(时间)
时间值,在 Lua 内部以分钟数形式存储(0-1439),在配置文件中以 `"HH:MM"` 字符串形式存储。
```lua
-- 使用工具函数创建时间
RESERVE_BEGIN_TIME = time(9, 0) -- 09:00
RESERVE_END_TIME = time(21, 30) -- 21:30
RESERVE_BEGIN_TIME = timeadd(timenow(), 60) -- 当前时间 + 1 小时
RESERVE_END_TIME = strtotime("22:00") -- 从字符串解析
```
<Info>
时间值在内部是以分钟为单位的整数值。`time(9, 30)` 等价于 `570`(9*60 + 30)。
虽然可以直接使用数值,但建议始终使用工具函数以确保可读性和正确性。
</Info>
## 虚拟变量
以下两个变量存在于可视化编排器中,但在实际 Lua 脚本中不可用。编排器会在生成代码时将它们转换为对应的函数调用:
| 虚拟变量 | 编排器中的含义 | 生成的 Lua 代码 |
| --- | --- | --- |
| `CURRENT_DATE` | 当前日期 | `datenow()` |
| `CURRENT_TIME` | 当前时间 | `timenow()` |
<Note>
在代码编辑器中编写脚本时,请直接使用 `datenow()` 和 `timenow()` 函数,
不要使用 `CURRENT_DATE` 或 `CURRENT_TIME`。
</Note>
## 类型安全
AutoScript 引擎会在脚本执行前后验证变量类型。以下情况会导致错误:
- 将字符串赋给日期变量
- 将布尔值赋给整数变量
- 将浮点数赋给需要整数的变量
- 变量值变为 `nil`
```lua
-- 正确:类型匹配
RESERVE_DATE = dateadd(datenow(), 1) -- Date = Date
USER_ENABLE = true -- Boolean = Boolean
-- 错误:类型不匹配
RESERVE_DATE = "2025-10-30" -- Error: Date ≠ String
USER_ENABLE = 1 -- Error: Boolean ≠ Int
```
<Tip>
如果脚本执行后某个变量值未改变,脚本中对该变量的赋值被跳过了,请检查赋值表达式的结果类型是否与变量声明的类型匹配。
</Tip>
-35
View File
@@ -1,35 +0,0 @@
---
title: "更新日志"
description: "AutoLibrary 产品更新与版本发布记录"
---
本页面记录 AutoLibrary 的产品更新与改进。最新更改优先显示。
<Update label="2026-05-29" description="本周更新">
## 新功能
- **可视化编排对话框**:通过图形化界面构建 AutoScript 脚本,支持调试运行、动态模拟目标数据输入,以及算术表达式的解析与回显。无需手写脚本即可创建复杂的自动化流程。查看 [核心功能](/zh/manual/v1.3.0/features/core) 了解如何使用。
- **AutoScript 行内注释**:现支持 `//` 行内注释和完整注释行,方便为自动化脚本添加说明。
- **算术表达式支持**:AutoScript 现支持算术表达式与变量的加减运算,可在脚本中进行动态计算。
- **全新应用图标**:AutoLibrary 启用全新设计的 SVG/ICO 图标,提升应用辨识度。
- **编辑器语法高亮**:脚本编辑器采用 VSCode C 风格配色方案,布尔字面量独立配色,提升脚本编辑体验。
## 更新
- **AutoScript 引擎升级至 v1.0.0**:脚本引擎迁移至 Lua 沙箱架构,提供更强的类型安全与异常处理。日期、时间相关函数已重命名(如 `CURRENT_DATE()` → `datenow()`,`date_add` → `dateadd`),请相应更新现有脚本。
- **预约检查流程优化**:数据校验前置,避免无效配置触发不必要的浏览器操作,预约失败时反馈更快。
- **关于对话框重构**:改用标签页分别展示系统信息、项目信息和许可证内容,新增 Selenium 版本展示。
- **手册站点域名迁移**:用户手册地址迁移至 `manuals.autolibrary.kenanzhu.com`,请更新书签。
- **强类型赋值校验**:AutoScript 中的 `SET` 赋值禁止跨类型隐式转换,可在脚本运行前及早发现类型错误。
## Bug 修复
- 修复编排窗口中 `CURRENT_DATE` 日期映射偏移、被错误识别为前天的问题。
- 统一闭馆时间常量为 22:30,修复预约校验阶段与选时阶段使用不同闭馆时间的不一致问题。
- 修正编排窗口生成的脚本块结尾,统一使用 `END IF` 结束。
- 修复验证码识别逻辑、预约时间校验流程以及异常处理。
- 加固元素操作防护,避免页面元素瞬时不可用时出现的偶发失败。
- 修复定时任务对话框的布局边距与间距问题。
</Update>
+215
View File
@@ -0,0 +1,215 @@
---
title: "通过文件配置"
description: "AutoLibrary JSON 配置文件参考 - run.json 与 user.json"
---
软件启动时,将自动在用户主目录下创建运行配置文件 `run.json` 和用户配置文件 `user.json`。
配置文件统一存放于用户数据目录下的 `AutoLibrary/config` 文件夹中。
以 Windows 系统为例:
```path
C:\Users\<用户名>\AppData\Roaming\AutoLibrary\config
```
macOS 系统中的路径则为:
```path
~/Library/Application Support/AutoLibrary/config
```
<Warning>
任何情况下都不建议在该目录下修改除运行配置文件、用户配置文件和全局配置文件以外的任何文件。
即使是修改配置文件,也请务必保持 [JSON 格式](https://www.json.org/json-zh.html)正确,否则可能导致软件无法正常启动或运行。
</Warning>
## 运行配置文件 (run.json)
```json
{
"library": {
"host_url": "http://10.1.20.7",
"login_url": "/login"
},
"mode": {
"run_mode": 1
},
"login": {
"auto_captcha": true,
"max_attempt": 3
},
"web_driver": {
"driver_type": "edge",
"driver_path": "",
"headless": false
}
}
```
### 字段 (library)
关于图书馆的相关配置,目前版本下无需更改
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `host_url` | String | 图书馆主机URL,无需更改 |
| `login_url` | String | 登录页面URL,无需更改 |
### 字段 (mode)
AutoLibrary 的运行模式
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `run_mode` | Number | 运行模式组合(+1 预约, +2 签到, +4 续约) |
### 字段 (login)
AutoLibrary 处理登录时的相关配置
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `auto_captcha` | Boolean | 自动验证码识别,建议保持 `true` |
| `max_attempt` | Number | 登录尝试次数,默认 3 次 |
### 字段 (web_driver)
AutoLibrary 使用的浏览器及其驱动的相关配置
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `driver_type` | String | 浏览器类型:`edge` / `chrome` / `firefox` |
| `driver_path` | String | 驱动文件路径,为空则运行失败 |
| `headless` | Boolean | 无头模式,默认 `false` |
## 用户配置文件 (user.json)
```json
{
"groups": [
{
"name": "分组名",
"enable": true,
"users": [
{
"username": "您的学号",
"password": "您的密码",
"enable": true,
"reserve_info": {
"date": "2025-10-30",
"place": "1",
"floor": "4",
"room": "5",
"begin_time": {
"time": "09:30",
"max_diff": 30,
"prefer_early": true
},
"end_time": {
"time": "21:23",
"max_diff": 30,
"prefer_early": false
},
"renew_time": {
"expect_duration": 1.0,
"max_diff": 30,
"prefer_early": false
},
"seat_id": "31A",
"expect_duration": 6,
"satisfy_duration": true
}
}
]
}
]
}
```
### 字段 (groups)
这是用户配置的最外层的用户分组,分组中会包含一个用户列表,
<Note>
即使只添加用户列表而不使用分组包裹,AutoLibrary 也会默认为该用户列表创建兼容分组。
</Note>
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `name` | String | 分组名称 |
| `enable` | Boolean | 是否启用该分组,`false` 时跳过 |
### 字段 (users)
用户分组中的用户列表
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `username` | String | 学号 |
| `password` | String | 密码 |
| `enable` | Boolean | 是否启用该用户,`false` 时跳过 |
### 字段 (reserve_info)
该字段包含了用户的座位预约信息
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `date` | String | 预约日期(格式 `yyyy-MM-dd`) |
| `place` | String | `"图书馆"` 或 `"1"` |
| `floor` | String | 楼层代码,**详见下方楼层映射** |
| `room` | String | 区域代码,**详见下方区域映射** |
| `seat_id` | String | 座位编号,如 `12A` `012a` |
| `expect_duration` | Number | 期望预约时长(分钟) |
| `satisfy_duration` | Boolean | 是否满足期望时长 |
<Accordion title="楼层映射">
| 代码 | 楼层 |
| --- | --- |
| `2` | 二层 |
| `3` | 三层 |
| `4` | 四层 |
| `5` | 五层 |
</Accordion>
<Accordion title="区域映射">
| 代码 | 区域 |
| --- | --- |
| `1` | 二层内环 |
| `2` | 二层西区 |
| `3` | 三层内环 |
| `4` | 三层外环 |
| `5` | 四层内环 |
| `6` | 四层外环 |
| `7` | 期刊区 |
| `8` | 五层考研 |
</Accordion>
#### 子字段 begin_time
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `time` | String | 开始时间(格式 `HH:mm`) |
| `max_diff` | Number | 最大时间差(分钟) |
| `prefer_early` | Boolean | 是否优先较早时间 |
#### 子字段 end_time
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `time` | String | 结束时间(格式 `HH:mm`) |
| `max_diff` | Number | 最大时间差(分钟) |
| `prefer_early` | Boolean | 结束时间优先较晚 |
#### 子字段 renew_time
<Info>
各用户配置的该子字段只在自动续约模式下才会被 AutoLibrary 读取
</Info>
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `expect_duration` | Number | 期望续约时长(小时) |
| `max_diff` | Number | 最大时间差(分钟) |
| `prefer_early` | Boolean | 续约时间优先较晚 |
+18
View File
@@ -0,0 +1,18 @@
---
title: "启动工具"
description: "AutoLibrary 启动与运行说明"
---
运行 AutoLibrary 文件,工具将启动主界面。
![运行主界面](/images/v1.2.1/main-ui.png)
软件首次启动时,未初始化配置文件,直接运行脚本会提示配置文件未找到。这属于预期行为,请先完成下方配置。
<Info>
为适应不同的用户需求,这里分别提供了通过界面与直接修改配置文件两种方式,请按照需求参考选择。
</Info>
<Note>
Windows 与 macOS 平台配置文件路径因系统而异,详见[通过文件配置](/zh/manual/v1.4.0/configuration/file)页面。
</Note>
+101
View File
@@ -0,0 +1,101 @@
---
title: "通过界面配置"
description: "AutoLibrary 界面配置指南 - 用户、预约、系统设置与运行模式"
---
点击主界面窗口右上角的 [**配置**] 按钮,打开配置窗口。
<Tabs>
<Tab title="用户配置">
![配置窗口-用户配置](/images/v1.2.1/config-window-user.png)
<Info>
初次运行软件时,用户配置默认为空,需要手动添加。
</Info>
### 用户列表
| 功能 | 说明 | 备注 |
| --- | --- | --- |
| 用户列表 | 显示当前配置文件中的所有用户 | 支持 [**添加**]、[**删除**] 用户操作,选中用户项进行详细配置 |
### 用户信息
| 参数 | 说明 | 默认值/可选值 |
| --- | --- | --- |
| 学号 | 用户的学号 | 必填项,用于登录图书馆系统 |
| 密码 | 用户的密码 | 默认值为 `000000`,请根据实际情况修改 |
### 预约信息
| 参数 | 说明 | 默认值/可选值 |
| --- | --- | --- |
| 日期 | 座位预约日期 | 格式 `yyyy-MM-dd`,18:00-23:00可预约次日 |
| 地点 | 预约座位的地点 | 默认值:`图书馆` |
| 楼层 | 预约座位的楼层 | `二层` `三层` `四层` `五层` |
| 区域 | 预约座位的区域 | 默认值:`二层内环`,可选随楼层变化 |
| 座位号 | 预约座位的座位号 | 例如:`12A` `012a` |
| 开始时间 | 预约开始时间 | 格式 `HH:mm`,可选范围 7:30-23:30 |
| 结束时间 | 预约结束时间 | 格式 `HH:mm`,默认当前时间+2小时 |
| 最大时间偏差 | 时间不可用时的偏差范围 | 0-120分钟,0 表示严格按选择时间 |
| 优先最早/晚 | 多可选时间时的优先选择 | 开始时间优先最早,结束/续约时间优先最晚 |
| 期望预约时长 | 预约期望时长 | 0-8 小时,默认 2 小时 |
| 期望续约时长 | 续约期望时长 | 0-4 小时,默认 1 小时 |
| 优先满足期望时长 | 是否优先满足时长限制 | 勾选后尽量满足,但可能因座位紧张导致预约失败 |
</Tab>
<Tab title="运行配置">
![配置窗口-运行配置](/images/v1.2.1/config-window-runtime.png)
### 图书馆设置
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| 访问网址 | 图书馆系统的主机URL | `http://10.1.20.7`(无需更改) |
| 登录页面 | 登录页面的URL路径 | `/login`(无需更改) |
### 浏览器设置
| 参数 | 说明 | 默认值/可选值 |
| --- | --- | --- |
| 浏览器类别 | 使用的浏览器类型 | Microsoft Edge / Google Chrome / Mozilla Firefox |
| 浏览器驱动路径 | 驱动程序路径 | 通过[**浏览**] 按钮选择 |
| 无头模式 | 是否隐藏浏览器窗口 | `false`(显示窗口),`true` 为隐藏运行 |
### 登录设置
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| 自动识别验证码 | 是否自动处理验证码 | 勾选(推荐) |
| 登录尝试次数 | 登录失败后最大重试次数 | 3 次 |
### 运行模式
| 功能 | 说明 | 触发条件 |
| --- | --- | --- |
| 自动预约 | 按配置进行座位预约 | 用户当天无有效预约时执行 |
| 自动签到 | 自动完成图书馆签到 | 满足条件时执行,否则跳过 |
| 自动续约 | 自动延长座位使用时间 | 满足条件时执行,否则跳过 |
</Tab>
<Tab title="其它">
![配置窗口-其它](/images/v1.2.1/config-window-other.png)
### 配置文件的保存与读取
| 参数 | 说明 |
| --- | --- |
| 运行配置文件路径 | 可通过 [**...**] 按钮选择新的配置文件 |
| 用户配置文件路径 | 可通过 [**...**] 按钮选择新的配置文件 |
### 导出配置
支持将当前配置导出为文件,选择目标路径和文件名后点击 [**导出配置文件**] 按钮。
</Tab>
</Tabs>
## 运行工具
配置完成后,点击主界面窗口顶部右侧的绿色按钮 [**启动脚本**],工具将按配置自动执行预约、签到、续约等操作。
<Note>
AutoLibrary 将按照配置文件处理所有启用的用户组中的可用用户。
</Note>
+95
View File
@@ -0,0 +1,95 @@
---
title: "联系我们"
description: "AutoLibrary 的相关链接,以及快速获取联系我们的方式"
---
## 相关链接
下列是快速获取与 AutoLibrary 相关的最新信息的方式,你可以跟踪最新的开发进展
以及未来的开发规划
<CardGroup cols={2}>
<Card
title="GitHub"
icon="github"
href="https://github.com/KenanZhu/AutoLibrary"
>
项目的官方源码托管仓库、版本发布与 Issue 跟踪。
</Card>
<Card
title="Gitea 镜像"
icon="https://gitea.kenanzhu.com/assets/img/favicon.png"
href="https://gitea.kenanzhu.com/KenanZhu/AutoLibrary"
>
自托管镜像仓库,提供更快的访问与其它个性化内容。
</Card>
<Card
title="下载"
icon="download"
href="https://autolibrary.kenanzhu.com/downloads"
>
获取 AutoLibrary 最新版本安装包。
</Card>
<Card
title="主题市场"
icon="palette"
href="https://autolibrary.kenanzhu.com/marketplace"
>
浏览、下载和分享 AutoLibrary 社区主题。
</Card>
</CardGroup>
<Info>
Gitea 镜像仓库与 GitHub 主仓库的同步间隔为 8 小时,因此出现提交不一致的问题是正常的,
请等待 Gitea 镜像仓库同步后再次检查。
</Info>
## 问题反馈
如果在使用 AutoLibrary 过程中遇到了一些问题,并且无法在本文档站点中寻找到任何解决方法;
亦或者是对 AutoLibrary 有一些自己的意见和建议,欢迎通过下面的各种渠道与我们取得联系
### GitHub Issues
使用过程中遇到问题或需要功能改进,请通过 GitHub Issues 提交反馈:
<Card
title="提交 Issue"
icon="circle-dot"
href="https://github.com/KenanZhu/AutoLibrary/issues"
>
提交 Bug 报告或功能请求前,请先搜索是否已有相关问题,避免重复提交。
</Card>
### 邮件联系
<Card
title="开发者邮箱"
icon="envelope"
href="mailto:nanoki_zh@163.com"
>
如需直接沟通,可通过邮件联系开发者。
</Card>
## 参与贡献
欢迎通过以下方式参与 AutoLibrary 项目,AutoLibrary 通过 [MIT 协议](https://github.com/KenanZhu/AutoLibrary/blob/main/license) 进行开源,你可以对 AutoLibrary 自由的修改并再次分发:
<Warning>
请通过 GitHub 主仓库提交 PR。Gitea 镜像仅用于数据同步备份,不参与代码贡献流程。
</Warning>
<Steps>
<Step title="Fork 仓库">
在 [GitHub](https://github.com/KenanZhu/AutoLibrary) 上 Fork 项目仓库至个人账号。
</Step>
<Step title="创建分支">
基于 <code>main</code> 分支创建特性分支。
</Step>
<Step title="提交更改">
编写清晰规范的提交信息,推送到 Fork 仓库。
</Step>
<Step title="发起 Pull Request">
向主仓库发起 [Pull Request](https://github.com/KenanZhu/AutoLibrary/pulls),描述修改内容与目的。
</Step>
</Steps>
+17
View File
@@ -0,0 +1,17 @@
---
title: "常见问题"
description: "AutoLibrary 使用问答"
---
<Accordion title="使用 AutoLibrary 是否安全?">
AutoLibrary 完全模拟人工操作,不干扰图书馆系统正常运行。工具**不会收集或上传您的个人信息**,所有数据仅保存在本地配置文件中。
</Accordion>
<Accordion title="可以同时预约多个座位吗?">
根据图书馆规定,每个账号同一时间段只能预约一个座位。但您可以在配置中添加多个账号,工具会依次处理每个账号的预约请求。
<Warning>
本工具旨在辅助用户正常使用图书馆服务,请勿滥用影响他人及图书馆正常运行。
</Warning>
</Accordion>
<Accordion title="工具运行期间可以操作电脑吗?">
可以正常使用电脑,但**请勿操作工具自动打开的浏览器窗口**,否则可能会干扰工具正常运行。如需完全后台运行,可启用无头模式并最小化到托盘。
</Accordion>
+149
View File
@@ -0,0 +1,149 @@
---
title: "疑难解答"
description: "AutoLibrary 故障排除与常见问题解决方法"
---
## 工具启动时报错"无法找到驱动"
<Note>
这大概率是因为浏览器驱动未正确安装或版本不匹配。
因此我们强烈建议使用 AutoLibrary 的[浏览器驱动自动下载功能](/zh/manual/v1.4.0/installation/driver#%E6%96%B9%E5%BC%8F%E4%B8%80%EF%BC%9A%E4%BD%BF%E7%94%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E9%A9%B1%E5%8A%A8%E8%87%AA%E5%8A%A8%E4%B8%8B%E8%BD%BD%E5%8A%9F%E8%83%BD%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89)。
这可以很大程度上减少此类问题的发生。
</Note>
<Steps>
<Step title="检查驱动位置">
确认驱动文件是否放置在正确位置。
</Step>
<Step title="确认版本匹配">
驱动版本必须与浏览器版本完全匹配(如 Chrome 需对应版本的 `chromedriver.exe`,切勿混用)。
</Step>
<Step title="重新安装驱动">
使用浏览器驱动自动下载窗口重新安装。
</Step>
</Steps>
## 登录失败,提示账号密码错误
请检查配置界面中的账号密码是否正确。
<Steps>
<Step title="确认账号密码">
确认学号和密码无误。
</Step>
<Step title="检查特殊字符">
检查是否有不支持的特殊字符需要转义。
</Step>
<Step title="手动验证">
尝试手动登录图书馆系统确认账号可用。
</Step>
</Steps>
## 预约失败,提示座位不可用
目标座位可能已被他人预约或不在可预约时间。
<Steps>
<Step title="确认座位信息">
确认座位编号、楼层、区域是否正确。
</Step>
<Step title="调整预约策略">
尝试预约其它座位或调整时间参数。增大 [**最大时长偏差**] 让工具在允许的时间范围内自动选择最佳起始时间。
</Step>
</Steps>
## 定时任务显示"已就绪"或"执行中"且无法删除
<Warning>
此解决方法需要直接操作 AutoLibrary 的核心配置文件,需要操作者对 [JSON 格式](https://www.json.org/json-zh.html)有一定了解。**操作前请务必备份相关文件**,以免误操作导致配置丢失。
</Warning>
这一般是因为定时任务已进入预约队列,但软件上次异常关闭未能处理完毕。请按以下步骤手动删除:
<Steps>
<Step title="记录异常任务信息">
检查界面中正在运行的定时任务,记住任务名称或运行时间等可用于定位的信息。
</Step>
<Step title="找到配置文件目录">
在 AutoLibrary 配置界面的 [**其它**] 选项卡中,找到 [**当前运行配置路径**] 显示的文件夹路径,使用文件管理器打开该目录。
</Step>
<Step title="打开定时任务配置文件">
在该目录中找到名为 `timer_task.json` 的文件,使用文本编辑器打开(推荐 [VS Code](https://code.visualstudio.com/)、[Notepad++](https://notepad-plus-plus.org/),也可直接使用记事本)。
</Step>
<Step title="定位异常任务">
在 JSON 文件中查找包含以下信息的任务配置块:
- `name`(任务名称)
- `execute_time`(执行时间)
如果任务名包含中文,在 JSON 中会以 Unicode 编码显示,
如 `"name": "预约任务"` 在 Unicode 显示下会变为: `"name": "预约任务"`。
可使用在线工具搜索「Unicode 转中文」进行转换确认。
</Step>
<Step title="删除异常任务">
将找到的任务配置块从 JSON 文件中完全删除。
<Warning>
删除时请保持 JSON 格式完整:确保花括号 `{}`、方括号 `[]`、逗号等符号正确。不要删除其它正常任务配置。
</Warning>
</Step>
<Step title="重启软件">
完全关闭 AutoLibrary 后重新打开,异常定时任务应已成功删除,界面状态恢复正常。
</Step>
</Steps>
<Tip>
如果操作后 JSON 格式出错,软件可能会覆写原有配置文件。请确保备份,并检查 JSON 语法是否正确(注意最后一个元素后不要有多余的逗号)。
</Tip>
## macOS 系统首次启动被阻止
macOS 用户首次启动 AutoLibrary 时,系统可能提示"无法验证开发者"并阻止打开应用。
这是由于应用未经过 Apple 官方代码签名所致。请按以下步骤操作:
<Steps>
<Step title="取消弹窗">
首次双击 `AutoLibrary.app` 后,系统弹出"无法验证开发者"提示,点击 [**取消**] 关闭弹窗。
</Step>
<Step title="进入隐私设置">
打开系统 [**设置**] → [**隐私与安全性**]。
</Step>
<Step title="允许运行">
在页面底部找到关于 AutoLibrary 的拦截提示,点击右侧的 [**仍要打开**] 按钮,并在弹出的对话框中再次确认 [**打开**]。
</Step>
</Steps>
<Note>
右键点击 → [**打开**] 的方式在某些 macOS 版本中可能不会出现允许选项。如果该方法无效,请使用上述系统设置方法。
</Note>
## macOS 系统浏览器驱动无法运行
在 macOS 上下载的浏览器驱动可能被系统隔离,导致无法执行。
<Steps>
<Step title="移除隔离属性">
打开终端,运行以下命令移除驱动的隔离属性:
```bash
xattr -d com.apple.quarantine /path/to/driver
```
将 `/path/to/driver` 替换为实际的驱动文件路径。
</Step>
<Step title="添加执行权限">
如果系统提示无执行权限,运行以下命令:
```bash
chmod +x /path/to/driver
```
</Step>
<Step title="验证驱动可执行">
在终端中运行驱动文件确认其可正常启动。例如:
```bash
/path/to/chromedriver --version
```
</Step>
</Steps>
+38
View File
@@ -0,0 +1,38 @@
---
title: "核心功能"
description: "AutoLibrary 核心功能 - 自动预约、签到、续约、AutoScript 脚本与模式组合"
---
## 运行模式
<CardGroup cols={3}>
<Card
title="自动预约"
icon="calendar-check"
href="#"
>
如果用户当前没有有效预约,工具会自动为您预约指定座位。适用于提前预约第二天的座位。
</Card>
<Card
title="自动签到"
icon="clipboard-check"
href="#"
>
在可签到时间范围(开始时间的前后30分钟)内,自动完成签到,避免因忘记签到导致失约。
</Card>
<Card
title="自动续约"
icon="rotate-right"
href="#"
>
到达可续约时间(结束时间前的120分钟),自动延长座位使用时间。
</Card>
</CardGroup>
## 模式组合
运行模式可以组合使用,只需在配置窗口中勾选对应模式即可。同时启用三种模式后,工具会自动判断当前状态并执行相应操作。
<Tip>
推荐同时启用三种模式,让工具自动处理预约、签到、续约的完整流程。
</Tip>
+136
View File
@@ -0,0 +1,136 @@
---
title: "定时任务"
description: "AutoLibrary 定时任务管理 - 添加、编辑、删除定时任务与 AutoScript 集成"
---
使用内置定时任务管理,添加定时任务后在指定时间按当前预约信息自动运行。
支持设置重复周期,如每周一、周三、周五自动执行。
在定时任务中集成 AutoScript 脚本,在任务执行前自动调整预约参数。
## 打开定时任务管理
点击主界面窗口底部左侧的 [<Icon icon="clock" />] 按钮,打开定时任务管理窗口。
![定时任务管理窗口](/images/v1.3.0/timer-management-window.png)
![功能介绍-定时任务](/images/v1.2.1/feature-timer.png)
## 添加定时任务
点击 [**添加任务**] 按钮,在弹出的对话框中配置任务参数:
![添加定时任务对话框](/images/v1.3.0/add-timer-dialog.png)
<Info>
添加后任务将显示在列表中,状态为"等待中"。到达指定时间后自动执行。
</Info>
### 定时类型
| 选项 | 说明 | 示例 |
| --- | --- | --- |
| [**特定时间**] | 指定任务开始的绝对时间 | `2025-10-30 08:00:00` |
| [**相对时间**] | 相对当前时间的偏移量 | 提前 1 天、提前 2 小时、提前 30 分钟 |
### 运行模式
| 选项 | 行为 | 适用场景 |
| --- | --- | --- |
| [**静默运行**] | 任务执行时不会弹出窗口,完成后右下角通知 | 完全自动化,无需人工干预 |
| [**运行前提示**] | 任务执行前显示提示信息 | 需要在运行前确认或查看进度 |
<Tip>
如需完全静默运行:在配置界面的系统设置中勾选 [**无头模式**],并在程序托盘中右键选择 [**最小化到托盘**]。这样定时任务运行时不会显示主界面和浏览器窗口,仅在完成时弹出系统通知。
</Tip>
### 重复执行
勾选 [**启用重复执行**] 后,可以按周循环执行任务:
- 选择需要运行的天(如:每周一、周三、周五)
- 需要每天运行则勾选全部(周一至周日)
- 全选和全不选均视为每日执行
## AutoScript 自动化脚本
AutoScript 是基于 Lua 语言的自动化脚本引擎,支持条件判断和算术表达式,
可在定时任务运行前对预约参数进行动态调整,比如能够实现以下场景:
<Note>
AutoScript 自动化脚本仅支持在**重复性**定时任务中配置,请务必
勾选 [**启用重复执行**] 以使用 AutoScript 脚本。
</Note>
- 根据当前日期动态调整预约时间
- 根据用户状态自动切换预约参数
- 多个用户配置的批量自动化处理
<Card
title="AutoScript 手册"
icon="code"
href="/zh/autoscript/index"
>
查看完整的 AutoScript 语法指引、工具使用说明和集成方法。
</Card>
<Steps>
<Step title="编写 AutoScript 脚本">
在添加或编辑定时任务对话框中,点击 [**AutoScript 指令**] 区域
的 [**编辑**] 按钮,打开代码编辑器编写脚本。
例如,以下脚本将预约日期设为明天,开始时间设为上午 9:00:
```lua
RESERVE_DATE = dateadd(datenow(), 1)
RESERVE_BEGIN_TIME = time(9, 0)
```
</Step>
<Step title="保存脚本">
在编辑器中点击 [**确认**],脚本将直接保存到当前定时任务的配置中。无需手动管理外部脚本文件。
</Step>
<Step title="验证脚本效果">
建议结合使用 AutoScript 编辑器的 [**调试运行**] 功能,在模拟数据上验证脚本逻辑,确保参数调整符合预期。
</Step>
</Steps>
<Info>
AutoScript 脚本在定时任务每次执行前独立运行,针对每个启用的用户组和用户依次应用。脚本修改的参数仅影响当次执行,
不会回写到用户配置文件。详见 [AutoScript 集成](/zh/autoscript/integration)。
</Info>
## 编辑定时任务
支持对已创建的定时任务进行编辑修改,无需删除重建。
<Steps>
<Step title="打开编辑菜单">
在定时任务管理窗口中,在任务列表中的任意任务项上单击**鼠标右键**,在弹出的菜单中选择 [**编辑**]。
![定时任务右键编辑菜单](/images/v1.3.0/timer-context-menu-edit.png)
</Step>
<Step title="修改配置">
编辑对话框将显示任务的当前配置。您可以修改:
- 任务名称
- 定时时间
- 运行模式
- AutoScript 脚本(通过内置编辑器管理)
- 将普通任务转换为可重复性任务(反之亦然)
</Step>
</Steps>
<Info>
编辑任务时,任务的 UUID 和执行历史(可重复性任务)将被保留。修改执行时间后,状态将重置为"等待中"。
</Info>
## 删除定时任务
可通过以下两种方式移除定时任务:
- 右键菜单选择 [**删除**]
- 点击任务项右侧的 [**删除**] 按钮
<Warning>
删除可重复性任务将同时清除该任务的所有执行历史记录。
</Warning>
@@ -0,0 +1,132 @@
---
title: "外观"
description: "AutoLibrary 外观设置 - 主题模式、界面风格与自定义主题"
---
在全局设置窗口中,选择左侧导航栏的 [**外观**] 进入外观设置页面。
## 主题模式
| 选项 | 说明 |
| --- | --- |
| [**浅色**] | 使用浅色主题 |
| [**深色**] | 使用深色主题 |
| [**跟随系统**] | 根据操作系统设置自动切换浅色/深色模式(默认) |
## 界面风格
通过下拉列表选择 Qt 界面风格(如 `Fusion`、`Windows`、`macOS` 等)。可选值取决于系统中安装的 Qt 风格插件。
<Note>
更改界面风格后需要重启应用才能生效。
</Note>
## 自定义外观
你可以导入 `.altheme` 主题文件来替换默认外观:
<Warning>
导入主题前建议确认来源可信。尽管 AutoLibrary 会对主题文件进行基本的格式校验,
但恶意构造的主题文件可能存在安全风险。
因此我们建议尽量从 [AutoLibrary 主题市场](https://autolibrary.kenanzhu.com/marketplace)
获取相对可靠的主题文件。
</Warning>
<Steps>
<Step title="获取主题文件">
从 [AutoLibrary 主题市场](https://autolibrary.kenanzhu.com/marketplace) 浏览并下载你喜欢的主题文件(`.altheme`)。
<Info>
AutoLibrary 所发布的软件包中不含预装主题,所有主题文件需要从主题市场获取。
</Info>
</Step>
<Step title="导入主题">
在 [**自定义外观**] 区域点击 [**浏览**] 按钮,选择下载的 `.altheme` 文件。
AutoLibrary 同时支持 `.altheme` 和 `.qss` 格式的主题文件。导入 `.qss` 文件时,
AutoLibrary 会自动包装为 `.altheme` 格式。
<Note>
所有导入的主题文件都会**按照主题名称重新命名**并存放在 AutoLibrary 配置目录的 themes 文件夹下:
Windows 系统:
```path
C:\Users\<用户名>\AppData\Roaming\AutoLibrary\config\themes
```
macOS 系统:
```path
~/Library/Application Support/AutoLibrary/config/themes
```
</Note>
<Note>
导入时若与已有主题同名,AutoLibrary 会对比作者信息。同一作者的同名主题将被视为重复导入并被拒绝。
因此,发布主题时请确保你的每个作品使用唯一名称。
</Note>
</Step>
<Step title="选择并应用">
导入后,从下拉列表中选择该主题即可预览。点击 [**应用**] 保存设置,或点击 [**确认**] 保存并关闭窗口。
</Step>
</Steps>
## 主题文件格式
<Note>
**如果需要上传并分享你的自定义主题文件,你应该了解以下内容。**
</Note>
AutoLibrary 主题(**a**uto **l**ibrary **theme**)`.altheme` 文件格式基于 ZIP 压缩格式,
其内部包含以下文件:
| 文件 | 说明 |
| --- | --- |
| `theme.qss` | Qt 样式表文件,定义界面外观 |
| `info.json` | 主题元数据,包含名称、作者、适配模式等信息 |
<Note>
如果需要了解 Qt 样式表文件(Qt Style Sheet, QSS),请访问
[Qt QSS 官方参考文档](https://doc.qt.io/qt-6/stylesheet-reference.html)
</Note>
`info.json` 结构示例:
```json
{
"qss": "theme.qss",
"name": "My Theme",
"author": "Your Name",
"need_theme": "dark",
"brief": "简洁的深色主题"
}
```
| 字段 | 说明 |
| --- | --- |
| `qss` | 样式表文件名,指向压缩包内的 QSS 文件 |
| `name` | 主题名称 |
| `author` | 主题作者 |
| `need_theme` | 适配主题:`"dark": 深色` `"light": 浅色` `"both": 兼容两者` |
| `brief` | 关于主题样式的简短描述,建议不要超过 50 个字符 |
## 主题市场
[AutoLibrary 主题市场](https://autolibrary.kenanzhu.com/marketplace)是一个在线平台,
供用户浏览、下载和分享自定义主题。
### 通过市场上传与分享
如果你按照上述格式规范制作了自定义主题,可以通过主题市场上传分享:
1. 注册 [AutoLibrary 主题市场](https://autolibrary.kenanzhu.com/marketplace)账户。注册时,
昵称建议设置为主题中的作者名,以免引起命名冲突
2. 准备 `.altheme` 主题文件
3. 在上传页面,拖入或选择你准备好的 `.altheme` 主题文件
4. 填写必要的主题信息(名称、简介描述、适配主题、兼容版本等)
5. 提交审核,等待审核通过后即可在主题市场中搜索、浏览并下载你分享的主题文件
<Info>
上传的主题需要经过管理员审核后才能公开发布。审核通过后,其它用户即可在市场中浏览和下载。
如果提交被管理员退回,请仔细阅读审核退回原因,按要求通过编辑保存修改后即可重新提交审核。
</Info>
@@ -0,0 +1,22 @@
---
title: "全局设置"
description: "AutoLibrary 全局设置窗口与界面概览"
---
全局设置窗口,用于管理应用级别的设置。全局设置与脚本运行配置相互独立,修改后应用重启仍然生效。
## 打开方式
点击菜单栏中的 [**工具**] → [**全局设置**],打开全局设置窗口。
![全局设置窗口](/images/v1.4.0/global-settings-window.png)
## 界面概览
全局设置窗口左侧为导航栏,右侧为设置内容区域。选择左侧导航项可切换到对应的设置页面。窗口底部为操作按钮:
| 按钮 | 功能 |
| --- | --- |
| [**取消**] | 放弃修改并关闭窗口 |
| [**应用**] | 保存当前设置但不关闭窗口 |
| [**确认**] | 保存设置并关闭窗口 |
+19
View File
@@ -0,0 +1,19 @@
---
title: "开始之前"
description: "阅读文档前的格式约定与说明"
---
在开始使用 AutoLibrary 之前,建议先了解本文档的一些格式约定,帮助你更高效地阅读文档内容。
## 文档约定
### 软件控件
文档中所有涉及 AutoLibrary 软件界面的控件(如按钮、菜单项、选项卡、输入框、复选框等),统一使用 [**加粗字体**] 的格式表示(即中括号包裹的加粗文字)。例如:
- 点击 [**启动脚本**] 按钮开始运行
- 在配置窗口中切换到 [**用户配置**] 选项卡
- 右键菜单中选择 [**编辑**]
- 勾选 [**启用重复执行**] 以开启周期任务
当你看到一段 [**加粗**] 格式的文字时,即表示这是 AutoLibrary 中的某个可交互元素,你可以在软件中找到对应的操作入口。
+41
View File
@@ -0,0 +1,41 @@
---
title: "概述"
description: "北京建筑大学图书馆座位自动化工具 - 简化预约、签到、续约流程"
icon: ""
---
AutoLibrary 是一款专为北京建筑大学图书馆设计的自动化工具,旨在简化图书馆座位操作流程。
同时支持 Windows 与 macOS 平台。
## 快速开始
<CardGroup cols={2}>
<Card
title="安装"
icon="download"
href="/zh/manual/v1.4.0/installation/install"
>
快速开始,安装 AutoLibrary 与其它必要的准备。支持 Windows 与 macOS 平台。
</Card>
<Card
title="配置"
icon="sliders"
href="/zh/manual/v1.4.0/configuration/start"
>
完整参数参考:用户信息、预约参数、系统设置、主题外观与配置文件详解。
</Card>
<Card
title="功能"
icon="bolt"
href="/zh/manual/v1.4.0/features/core"
>
核心功能概览:自动预约、签到、续约、AutoScript 脚本与定时任务管理。
</Card>
<Card
title="FAQ"
icon="circle-question"
href="/zh/manual/v1.4.0/faq/troubleshooting"
>
常见问题解决方法与使用问答,快速排查使用问题。
</Card>
</CardGroup>
+80
View File
@@ -0,0 +1,80 @@
---
title: "安装浏览器驱动"
description: "AutoLibrary 浏览器驱动配置指南 - 自动下载与手动安装"
---
工具需要通过浏览器驱动来控制浏览器。以下两种方式可以帮助您快速配置驱动:
<Accordion title="什么是浏览器驱动?">
浏览器驱动是一种处于自动化工具与浏览器之间的中间程序,它接收自动化工具的指令并转发给浏览器执行,
从而实现对浏览器的自动控制。AutoLibrary 通过浏览器驱动来完成登录、预约、签到等需要操作网页的操作。
每个浏览器都有各自对应的驱动:
| 浏览器 | 对应 | 驱动 |
| --- | --- | --- |
| Microsoft Edge | → | Edge WebDriver |
| Google Chrome | → | Chrome Driver |
| Mozilla Firefox | → | Gecko Driver |
| ... | → | ... |
<Note>
不同类型浏览器的驱动只能适用于其对应的浏览器,且驱动版本必须与浏览器版本匹配,否则无法正常工作。
AutoLibrary 的自动下载功能可以帮助解决版本匹配问题。
</Note>
</Accordion>
<Tip>
AutoLibrary 支持自动检测本地安装的浏览器,并查找适配的驱动版本,大大简化了配置流程。
</Tip>
## 方式一:使用浏览器驱动自动下载功能
<Steps>
<Step title="打开驱动下载窗口">
在 [AutoLibrary 配置界面](/zh/manual/v1.4.0/configuration/ui#%E8%BF%90%E8%A1%8C%E9%85%8D%E7%BD%AE)中,点击 [**浏览器驱动自动下载**] 按钮。
![浏览器驱动自动下载窗口](/images/v1.2.1/driver-auto-download-window.png)
</Step>
<Step title="选择驱动版本">
工具会自动检测您电脑上已安装的浏览器,并列出可用的驱动版本。
</Step>
<Step title="开始下载">
从窗口中的下拉列表中选择需要的浏览器驱动版本,点击 [**下载驱动**] 按钮。
![开始下载浏览器驱动](/images/v1.2.1/driver-auto-download-window-start.png)
</Step>
<Step title="完成配置">
下载完成后,点击 [**确认**] 将驱动类型与驱动路径保存到配置窗口中并退出下载对话框。
![浏览器驱动下载完成](/images/v1.2.1/driver-auto-download-window-done.png)
</Step>
</Steps>
## 方式二:手动下载浏览器驱动
如果仍需手动下载驱动,请根据您使用的浏览器和操作系统选择对应的驱动:
| 浏览器 | 适用系统 | 下载链接 |
| --- | --- | --- |
| Microsoft Edge | 跨平台 | [下载 Edge 驱动](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) |
| Google Chrome | 跨平台 | [下载 Chrome 驱动](https://developer.chrome.google.cn/docs/chromedriver/downloads) |
| Mozilla Firefox | 跨平台 | [下载 Firefox 驱动](https://github.com/mozilla/geckodriver/releases) |
<Note>
macOS 用户请根据 Mac 芯片类型选择对应架构的驱动:
- Apple Silicon (M1/M2/M3/M4) → 选择 `arm64` 或 `mac64_m1` 版本
- Intel → 选择 `x64` 或 `mac64` 版本
下载后,驱动文件通常以可执行文件形式提供。
如果系统提示无法验证开发者,请在终端中运行:
```bash
xattr -d com.apple.quarantine /path/to/driver
```
如果系统提示无执行权限,请添加执行权限:
```bash
chmod +x /path/to/driver
```
</Note>
+74
View File
@@ -0,0 +1,74 @@
---
title: "安装 AutoLibrary"
description: "AutoLibrary 下载与安装指南 - Windows 与 macOS 平台"
---
AutoLibrary 是一款专为北京建筑大学图书馆设计的自动化工具,帮助您简化图书馆座位操作流程,节省宝贵时间。工具完全模拟人工操作,通过简单的界面配置即可使用。
## 下载软件
请从 [AutoLibrary 下载页面](https://autolibrary.kenanzhu.com/downloads)获取最新版本。
<Note>
[**GitHub Releases**](https://github.com/KenanZhu/AutoLibrary/releases):更新较为及时,但网络连接不稳定,速度较慢。
**云盘链接**:版本更新略有延迟,但下载速度更快。
</Note>
## 安装类型
### Windows
<Note>
从 v1.1.0 版本开始,提供两种版本可供选择:
</Note>
<Tabs>
<Tab title="压缩包版本">
解压下载好的压缩包文件到任意位置,双击运行其中的 `AutoLibrary.exe` 即可启动工具。
<Warning>
压缩包内的 `_internal` 文件夹与 `AutoLibrary.exe` 可执行文件需要位于同一目录下,请勿修改或移动这两个文件,否则可能导致工具无法正常运行。
</Warning>
</Tab>
<Tab title="安装器版本">
双击运行安装程序,按照步骤提示进行安装。安装完成后即可在桌面快捷方式或开始菜单中找到 AutoLibrary。
</Tab>
</Tabs>
### macOS
<Note>
AutoLibrary 的官方发布版本仅适用于 macOS Apple Silicon 系统及其架构。
</Note>
<Steps>
<Step title="下载 DMG 镜像">
从下载页面获取 `AutoLibrary.<版本号>-macos-arm64.dmg` 文件。
<Info>
目前仅提供 Apple Silicon (M 系列芯片) 版本。如果你使用 Intel 芯片的 Mac,请从源码自行构建,详见 [GitHub 仓库](https://github.com/KenanZhu/AutoLibrary) README 中的构建说明。
</Info>
</Step>
<Step title="安装应用">
双击打开 `.dmg` 文件,将 `AutoLibrary.app` 拖入 `Applications` 文件夹。
{/* TODO: 添加 macOS DMG 安装界面截图 */}
![macOS DMG 安装界面](/images/v1.4.0/macos-dmg-install.png)
</Step>
<Step title="首次启动(需绕过门禁)">
由于应用未经过 Apple 官方代码签名,首次启动时 macOS 可能会阻止运行。请按以下步骤操作:
1. 双击 `AutoLibrary.app`,系统弹出 "**无法验证开发者**" 提示后点击 [**取消**]
2. 打开系统 [**设置**] → [**隐私与安全性**]
3. 在页面底部找到关于 AutoLibrary 的拦截提示,点击右侧的 [**仍要打开**]
4. 在弹出的对话框中再次确认 [**打开**]
<Tip>
此操作只需执行一次,之后即可正常双击启动。
</Tip>
<Note>
右键点击 → [**打开**] 的方式在某些 macOS 版本中可能不生效,建议优先使用上述方法。
</Note>
</Step>
</Steps>