ms-vite-plugin 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.js +6 -0
- package/dist/cli.js +91 -1
- package/dist/mcp/device-config.d.ts +55 -0
- package/dist/mcp/device-config.js +183 -0
- package/dist/mcp/docs-service.d.ts +65 -0
- package/dist/mcp/docs-service.js +168 -0
- package/dist/mcp/project.d.ts +16 -0
- package/dist/mcp/project.js +74 -0
- package/dist/mcp/tools.d.ts +18 -0
- package/dist/mcp/tools.js +825 -0
- package/dist/mcp/types.d.ts +32 -0
- package/dist/mcp/types.js +11 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +86 -0
- package/dist/project.d.ts +89 -0
- package/dist/project.js +306 -0
- package/dist/version.d.ts +12 -0
- package/dist/version.js +63 -0
- package/docs/api/action.md +922 -0
- package/docs/api/appleocr.md +229 -0
- package/docs/api/config.md +122 -0
- package/docs/api/cryptoUtils.md +232 -0
- package/docs/api/device.md +374 -0
- package/docs/api/file.md +516 -0
- package/docs/api/global.md +617 -0
- package/docs/api/hid.md +1032 -0
- package/docs/api/hotUpdate.md +166 -0
- package/docs/api/http.md +548 -0
- package/docs/api/image.md +907 -0
- package/docs/api/ime.md +290 -0
- package/docs/api/logger.md +324 -0
- package/docs/api/media.md +248 -0
- package/docs/api/mysql.md +441 -0
- package/docs/api/netCard.md +200 -0
- package/docs/api/node.md +353 -0
- package/docs/api/paddleocr.md +246 -0
- package/docs/api/pip.md +242 -0
- package/docs/api/system.md +572 -0
- package/docs/api/thread.md +269 -0
- package/docs/api/tomatoocr.md +425 -0
- package/docs/api/tts.md +334 -0
- package/docs/api/ui.md +947 -0
- package/docs/api/utils.md +265 -0
- package/docs/api/yolo.md +310 -0
- package/docs/apicn/action.md +919 -0
- package/docs/apicn/appleocr.md +233 -0
- package/docs/apicn/config.md +120 -0
- package/docs/apicn/device.md +385 -0
- package/docs/apicn/file.md +511 -0
- package/docs/apicn/global.md +613 -0
- package/docs/apicn/hid.md +1033 -0
- package/docs/apicn/hotUpdate.md +170 -0
- package/docs/apicn/http.md +672 -0
- package/docs/apicn/image.md +924 -0
- package/docs/apicn/ime.md +290 -0
- package/docs/apicn/logger.md +332 -0
- package/docs/apicn/media.md +252 -0
- package/docs/apicn/mysql.md +445 -0
- package/docs/apicn/netCard.md +200 -0
- package/docs/apicn/node.md +362 -0
- package/docs/apicn/paddleocr.md +255 -0
- package/docs/apicn/pip.md +242 -0
- package/docs/apicn/system.md +575 -0
- package/docs/apicn/thread.md +269 -0
- package/docs/apicn/tts.md +338 -0
- package/docs/apicn/ui.md +933 -0
- package/docs/apicn/utils.md +265 -0
- package/docs/apicn/yolo.md +314 -0
- package/docs/apipython/action.md +901 -0
- package/docs/apipython/appleocr.md +226 -0
- package/docs/apipython/config.md +126 -0
- package/docs/apipython/cryptoUtils.md +246 -0
- package/docs/apipython/device.md +365 -0
- package/docs/apipython/file.md +476 -0
- package/docs/apipython/g.md +154 -0
- package/docs/apipython/hid.md +1059 -0
- package/docs/apipython/hotUpdate.md +154 -0
- package/docs/apipython/image.md +938 -0
- package/docs/apipython/ime.md +306 -0
- package/docs/apipython/logger.md +330 -0
- package/docs/apipython/media.md +221 -0
- package/docs/apipython/mysql.md +432 -0
- package/docs/apipython/netCard.md +219 -0
- package/docs/apipython/node.md +331 -0
- package/docs/apipython/overview.md +66 -0
- package/docs/apipython/paddleocr.md +211 -0
- package/docs/apipython/pip.md +231 -0
- package/docs/apipython/system.md +458 -0
- package/docs/apipython/tomatoocr.md +444 -0
- package/docs/apipython/tts.md +331 -0
- package/docs/apipython/ui.md +949 -0
- package/docs/apipython/utils.md +284 -0
- package/docs/apipython/yolo.md +281 -0
- package/package.json +8 -4
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# 卡密模块 (NetCard)
|
|
2
|
+
|
|
3
|
+
卡密模块提供了卡密验证、备注设置以及键值对存储功能,用于管理网络卡密相关的操作。
|
|
4
|
+
|
|
5
|
+
## 功能概览
|
|
6
|
+
|
|
7
|
+
- **卡密验证**: 验证卡密的有效性
|
|
8
|
+
- **备注管理**: 设置和管理卡密备注信息
|
|
9
|
+
- **云变量存储**: 提供键值对形式的数据存储和读取功能
|
|
10
|
+
|
|
11
|
+
## 注意事项
|
|
12
|
+
|
|
13
|
+
1. **卡密安全**: 卡密信息应当妥善保管,避免在日志中明文输出
|
|
14
|
+
2. **API 调用顺序**: 验证卡密后,其他 api 才能调用
|
|
15
|
+
|
|
16
|
+
## API 参考
|
|
17
|
+
|
|
18
|
+
### 卡密验证
|
|
19
|
+
|
|
20
|
+
#### verify - 验证卡密
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
def verify(cardNo: str) -> bool
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**参数说明:**
|
|
27
|
+
|
|
28
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
29
|
+
| -------- | ---- | -------- | ------ | -------------------- |
|
|
30
|
+
| `cardNo` | str | 是 | | 需要验证的卡密字符串 |
|
|
31
|
+
|
|
32
|
+
**返回值:**
|
|
33
|
+
|
|
34
|
+
| 类型 | 描述 |
|
|
35
|
+
| ------ | ----------------------------------------------- |
|
|
36
|
+
| `bool` | 验证结果,True 表示验证成功,False 表示验证失败 |
|
|
37
|
+
|
|
38
|
+
**示例 1:**
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from kuaijs import netcard, logger
|
|
42
|
+
import sys
|
|
43
|
+
|
|
44
|
+
# 验证卡密
|
|
45
|
+
cardNo = "ABC123456789"
|
|
46
|
+
isValid = netcard.verify(cardNo)
|
|
47
|
+
|
|
48
|
+
if isValid:
|
|
49
|
+
logger.info("卡密验证成功")
|
|
50
|
+
else:
|
|
51
|
+
logger.error("卡密验证失败")
|
|
52
|
+
# 注意卡密验证失败退出程序
|
|
53
|
+
sys.exit(0)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**示例 2:**
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from kuaijs import netcard, logger, config
|
|
60
|
+
import sys
|
|
61
|
+
|
|
62
|
+
# 验证卡密 从配置中获取卡密
|
|
63
|
+
cardNo = config.get("cardNo")
|
|
64
|
+
isValid = netcard.verify(cardNo)
|
|
65
|
+
|
|
66
|
+
if isValid:
|
|
67
|
+
logger.info("卡密验证成功")
|
|
68
|
+
else:
|
|
69
|
+
logger.error("卡密验证失败")
|
|
70
|
+
# 注意卡密验证失败退出程序
|
|
71
|
+
sys.exit(0)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 获取卡密信息
|
|
75
|
+
|
|
76
|
+
#### getCardInfo - 获取卡密信息
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
from typing import TypedDict, Optional
|
|
80
|
+
|
|
81
|
+
class CardInfo(TypedDict):
|
|
82
|
+
cardNo: str
|
|
83
|
+
batchCard: str
|
|
84
|
+
remark: str
|
|
85
|
+
activeTime: int
|
|
86
|
+
expireTime: int
|
|
87
|
+
|
|
88
|
+
def getCardInfo() -> Optional[CardInfo]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**返回值:**
|
|
92
|
+
|
|
93
|
+
| 类型 | 描述 |
|
|
94
|
+
| ---------- | ------------------------------------ |
|
|
95
|
+
| `CardInfo` | 卡密信息对象,包含卡密及备注和时间等 |
|
|
96
|
+
|
|
97
|
+
`CardInfo` 字段:
|
|
98
|
+
|
|
99
|
+
- `cardNo`: 卡密号码
|
|
100
|
+
- `batchCard`: 批量码
|
|
101
|
+
- `remark`: 备注
|
|
102
|
+
- `activeTime`: 激活时间
|
|
103
|
+
- `expireTime`: 过期时间
|
|
104
|
+
|
|
105
|
+
**示例:**
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from kuaijs import netcard, logger
|
|
109
|
+
|
|
110
|
+
# 获取卡密信息
|
|
111
|
+
cardInfo = netcard.getCardInfo()
|
|
112
|
+
if cardInfo:
|
|
113
|
+
logger.info(f"卡密信息: {cardInfo}")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 备注管理
|
|
117
|
+
|
|
118
|
+
#### setCardRemark - 设置卡密备注
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
def setCardRemark(remark: str) -> bool
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**参数说明:**
|
|
125
|
+
|
|
126
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
127
|
+
| -------- | ---- | -------- | ------ | -------------- |
|
|
128
|
+
| `remark` | str | 是 | | 备注信息字符串 |
|
|
129
|
+
|
|
130
|
+
**返回值:**
|
|
131
|
+
|
|
132
|
+
| 类型 | 描述 |
|
|
133
|
+
| ------ | ----------------------------------------------- |
|
|
134
|
+
| `bool` | 设置结果,True 表示设置成功,False 表示设置失败 |
|
|
135
|
+
|
|
136
|
+
**示例:**
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from kuaijs import netcard, logger
|
|
140
|
+
|
|
141
|
+
# 设置卡密备注
|
|
142
|
+
remark = "测试用户卡密"
|
|
143
|
+
success = netcard.setCardRemark(remark)
|
|
144
|
+
|
|
145
|
+
if success:
|
|
146
|
+
logger.info("备注设置成功")
|
|
147
|
+
else:
|
|
148
|
+
logger.error("备注设置失败")
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 云变量
|
|
152
|
+
|
|
153
|
+
#### setValue - 设置键值对
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
def setValue(key: str, value: str) -> str
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**参数说明:**
|
|
160
|
+
|
|
161
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
162
|
+
| ------- | ---- | -------- | ------ | ---------- |
|
|
163
|
+
| `key` | str | 是 | | 存储的键名 |
|
|
164
|
+
| `value` | str | 是 | | 存储的值 |
|
|
165
|
+
|
|
166
|
+
**返回值:**
|
|
167
|
+
|
|
168
|
+
| 类型 | 描述 |
|
|
169
|
+
| ----- | --------------------------------------------- |
|
|
170
|
+
| `str` | 成功时返回设置的 value 值,失败时返回空字符串 |
|
|
171
|
+
|
|
172
|
+
**示例:**
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
from kuaijs import netcard, logger
|
|
176
|
+
|
|
177
|
+
# 设置键值对
|
|
178
|
+
key = "userConfig"
|
|
179
|
+
value = "enableNotification"
|
|
180
|
+
result = netcard.setValue(key, value)
|
|
181
|
+
|
|
182
|
+
if result == value:
|
|
183
|
+
logger.info(f"成功设置 {key}: {value}")
|
|
184
|
+
else:
|
|
185
|
+
logger.error("设置失败")
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
#### getValue - 获取键值对
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
def getValue(key: str) -> str
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**参数说明:**
|
|
195
|
+
|
|
196
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
197
|
+
| ------ | ---- | -------- | ------ | ------------ |
|
|
198
|
+
| `key` | str | 是 | | 要获取的键名 |
|
|
199
|
+
|
|
200
|
+
**返回值:**
|
|
201
|
+
|
|
202
|
+
| 类型 | 描述 |
|
|
203
|
+
| ----- | ------------------------------------------------ |
|
|
204
|
+
| `str` | 成功时返回对应的值,失败或键不存在时返回空字符串 |
|
|
205
|
+
|
|
206
|
+
**示例:**
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
from kuaijs import netcard, logger
|
|
210
|
+
|
|
211
|
+
# 获取键值对
|
|
212
|
+
key = "userConfig"
|
|
213
|
+
value = netcard.getValue(key)
|
|
214
|
+
|
|
215
|
+
if value:
|
|
216
|
+
logger.info(f"获取到配置: {key} = {value}")
|
|
217
|
+
else:
|
|
218
|
+
logger.warn(f"配置 {key} 不存在或获取失败")
|
|
219
|
+
```
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# 节点模块 (Node)
|
|
2
|
+
|
|
3
|
+
节点模块提供了强大的 UI 元素访问和操作功能,可以通过各种条件选择和操作界面元素。
|
|
4
|
+
|
|
5
|
+
**注意事项**
|
|
6
|
+
|
|
7
|
+
- 此模块仅支持 快点 Agent 模式使用
|
|
8
|
+
|
|
9
|
+
## 类型定义
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from typing import List, Literal, Optional, TypedDict, Union
|
|
13
|
+
|
|
14
|
+
class NodeBounds:
|
|
15
|
+
x: int
|
|
16
|
+
y: int
|
|
17
|
+
width: int
|
|
18
|
+
height: int
|
|
19
|
+
centerX: int
|
|
20
|
+
centerY: int
|
|
21
|
+
|
|
22
|
+
class NodeInfo:
|
|
23
|
+
id: str
|
|
24
|
+
identifier: str
|
|
25
|
+
label: str
|
|
26
|
+
type: str
|
|
27
|
+
value: str
|
|
28
|
+
placeholderValue: str
|
|
29
|
+
title: str
|
|
30
|
+
visible: bool
|
|
31
|
+
enabled: bool
|
|
32
|
+
bounds: NodeBounds
|
|
33
|
+
depth: int
|
|
34
|
+
index: int
|
|
35
|
+
parentId: str
|
|
36
|
+
childCount: int
|
|
37
|
+
|
|
38
|
+
def clickCenter(self) -> bool: ...
|
|
39
|
+
def clickRandom(self) -> bool: ...
|
|
40
|
+
def hittable(self) -> bool: ...
|
|
41
|
+
def parent(self) -> Optional["NodeInfo"]: ...
|
|
42
|
+
def child(self, index: int) -> Optional["NodeInfo"]: ...
|
|
43
|
+
def allChildren(self) -> List["NodeInfo"]: ...
|
|
44
|
+
def siblings(self) -> List["NodeInfo"]: ...
|
|
45
|
+
def previousSiblings(self) -> List["NodeInfo"]: ...
|
|
46
|
+
def nextSiblings(self) -> List["NodeInfo"]: ...
|
|
47
|
+
|
|
48
|
+
class NodeSelectorOptions(TypedDict, total=False):
|
|
49
|
+
maxDepth: int # 最大层级深度,默认 50
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 节点选择器 (NodeSelector)
|
|
53
|
+
|
|
54
|
+
节点选择器是访问 UI 元素的核心工具,提供了灵活的筛选和查找机制。
|
|
55
|
+
|
|
56
|
+
### 创建节点选择器
|
|
57
|
+
|
|
58
|
+
#### `createNodeSelector` - 创建节点选择器
|
|
59
|
+
|
|
60
|
+
创建一个新的节点选择器实例。
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
def createNodeSelector(params: Optional[NodeSelectorOptions] = None) -> NodeSelector
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**参数说明:**
|
|
67
|
+
|
|
68
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
69
|
+
| ---------- | ---- | -------- | ------ | --------------------- |
|
|
70
|
+
| `maxDepth` | int | 否 | 50 | 最大层级深度,默认 50 |
|
|
71
|
+
|
|
72
|
+
**返回值:** `NodeSelector`
|
|
73
|
+
|
|
74
|
+
**示例:**
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
from kuaijs import node
|
|
78
|
+
|
|
79
|
+
# 创建选择器
|
|
80
|
+
selector = node.createNodeSelector({
|
|
81
|
+
"maxDepth": 20 # 最大20层深度
|
|
82
|
+
})
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 选择器方法
|
|
86
|
+
|
|
87
|
+
#### 获取节点
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
# 获取当前页面的 XML 字符串
|
|
91
|
+
def xml(timeout: int = 5000) -> Optional[str]
|
|
92
|
+
|
|
93
|
+
# 获取多个节点
|
|
94
|
+
def getNodeInfo(timeout: int = 5000) -> List[NodeInfo]
|
|
95
|
+
|
|
96
|
+
# 获取单个节点
|
|
97
|
+
def getOneNodeInfo(timeout: int = 5000) -> Optional[NodeInfo]
|
|
98
|
+
|
|
99
|
+
# 加载节点数据(通常内部自动调用)
|
|
100
|
+
def loadNode(timeout: int = 5000) -> NodeSelector
|
|
101
|
+
|
|
102
|
+
# 清除所有选择条件
|
|
103
|
+
def clearSelector() -> NodeSelector
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**示例:**
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
from kuaijs import node
|
|
110
|
+
|
|
111
|
+
selector = node.createNodeSelector()
|
|
112
|
+
|
|
113
|
+
# 获取所有匹配的节点
|
|
114
|
+
all_nodes = selector.getNodeInfo(5000)
|
|
115
|
+
print(f"找到 {len(all_nodes)} 个节点")
|
|
116
|
+
|
|
117
|
+
# 获取第一个匹配的节点
|
|
118
|
+
first_node = selector.getOneNodeInfo(3000)
|
|
119
|
+
if first_node:
|
|
120
|
+
print(f"节点标签: {first_node.label}")
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### 条件筛选
|
|
124
|
+
|
|
125
|
+
##### 文本相关
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
# 精确匹配标签
|
|
129
|
+
def label(text: str) -> NodeSelector
|
|
130
|
+
|
|
131
|
+
# 标签模糊匹配
|
|
132
|
+
def labelMatch(pattern: str) -> NodeSelector
|
|
133
|
+
|
|
134
|
+
# 精确匹配名称
|
|
135
|
+
def title(text: str) -> NodeSelector
|
|
136
|
+
|
|
137
|
+
# 名称模糊匹配
|
|
138
|
+
def titleMatch(pattern: str) -> NodeSelector
|
|
139
|
+
|
|
140
|
+
# 精确匹配标识符
|
|
141
|
+
def identifier(text: str) -> NodeSelector
|
|
142
|
+
|
|
143
|
+
# 标识符模糊匹配
|
|
144
|
+
def identifierMatch(pattern: str) -> NodeSelector
|
|
145
|
+
|
|
146
|
+
# 精确匹配值
|
|
147
|
+
def value(text: str) -> NodeSelector
|
|
148
|
+
|
|
149
|
+
# 值模糊匹配
|
|
150
|
+
def valueMatch(pattern: str) -> NodeSelector
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**示例:**
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
# 查找标签为"确定"的按钮
|
|
157
|
+
confirm_button = selector.label("确定").getOneNodeInfo(3000)
|
|
158
|
+
|
|
159
|
+
# 查找包含"登录"的元素
|
|
160
|
+
login_elements = selector.labelMatch(".*登录.*").getNodeInfo(3000)
|
|
161
|
+
|
|
162
|
+
# 查找名称包含"button"的元素
|
|
163
|
+
buttons = selector.titleMatch("button").getNodeInfo(3000)
|
|
164
|
+
|
|
165
|
+
# 查找值为"submit"的元素
|
|
166
|
+
submit_element = selector.value("submit").getOneNodeInfo(2000)
|
|
167
|
+
|
|
168
|
+
# 通过标识符查找
|
|
169
|
+
el_by_id = selector.identifier("login_btn").getOneNodeInfo(2000)
|
|
170
|
+
fuzzy = selector.identifierMatch("^login_.*").getNodeInfo(3000)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
##### 类型与属性
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
# 精确匹配类型
|
|
177
|
+
def type(type_title: str) -> NodeSelector
|
|
178
|
+
|
|
179
|
+
# 类型模糊匹配
|
|
180
|
+
def typeMatch(pattern: str) -> NodeSelector
|
|
181
|
+
|
|
182
|
+
# 启用状态
|
|
183
|
+
def enabled(flag: bool) -> NodeSelector
|
|
184
|
+
|
|
185
|
+
# 可见性
|
|
186
|
+
def visible(flag: bool) -> NodeSelector
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**示例:**
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
from kuaijs import node
|
|
193
|
+
|
|
194
|
+
selector = node.createNodeSelector()
|
|
195
|
+
|
|
196
|
+
# 查找所有按钮
|
|
197
|
+
all_buttons = selector.type("XCUIElementTypeButton").getNodeInfo(3000)
|
|
198
|
+
|
|
199
|
+
# 查找所有文本框
|
|
200
|
+
text_fields = selector.typeMatch("XCUIElementTypeTextField").getNodeInfo(3000)
|
|
201
|
+
|
|
202
|
+
# 查找启用的元素
|
|
203
|
+
enabled_elements = selector.enabled(True).getNodeInfo(3000)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
##### 位置与结构
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
# 索引位置
|
|
210
|
+
def index(idx: int) -> NodeSelector
|
|
211
|
+
|
|
212
|
+
# 层级深度
|
|
213
|
+
def depth(d: int) -> NodeSelector
|
|
214
|
+
|
|
215
|
+
# 子节点数量(支持表达式,如 ">0")
|
|
216
|
+
def childCount(expr: Union[int, str]) -> NodeSelector
|
|
217
|
+
|
|
218
|
+
# 边界范围
|
|
219
|
+
def bounds(x: int, y: int, width: int, height: int) -> NodeSelector
|
|
220
|
+
|
|
221
|
+
# XPath 路径
|
|
222
|
+
def xpath(path: str) -> NodeSelector
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**说明:** `*_match` 支持正则/模糊匹配;`childCount` 支持表达式(如 `>0`)。
|
|
226
|
+
|
|
227
|
+
**示例:**
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from kuaijs import node
|
|
231
|
+
|
|
232
|
+
selector = node.createNodeSelector()
|
|
233
|
+
|
|
234
|
+
# 查找第一个元素
|
|
235
|
+
first_element = selector.index(0).getOneNodeInfo(2000)
|
|
236
|
+
|
|
237
|
+
# 查找特定深度的元素
|
|
238
|
+
level3_elements = selector.depth(3).getNodeInfo(3000)
|
|
239
|
+
|
|
240
|
+
# 查找有子节点的元素
|
|
241
|
+
parent_elements = selector.childCount(">0").getNodeInfo(3000)
|
|
242
|
+
|
|
243
|
+
# 查找特定区域的元素
|
|
244
|
+
region_elements = selector.bounds(100, 100, 200, 50).getNodeInfo(3000)
|
|
245
|
+
|
|
246
|
+
# 使用 XPath 查找
|
|
247
|
+
xpath_elements = selector.xpath("//*[@title='快点JS']").getNodeInfo(3000)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## 节点操作
|
|
251
|
+
|
|
252
|
+
`NodeSelector` 查找得到的 `NodeInfo` 支持直接调用操作方法(点击、无障碍手势等)。
|
|
253
|
+
|
|
254
|
+
### 点击操作
|
|
255
|
+
|
|
256
|
+
```python
|
|
257
|
+
# 点击节点中心
|
|
258
|
+
def clickCenter() -> bool
|
|
259
|
+
|
|
260
|
+
# 随机点击节点区域
|
|
261
|
+
def clickRandom() -> bool
|
|
262
|
+
|
|
263
|
+
# 节点是否可接收事件(用于判断是否显示在屏幕上)
|
|
264
|
+
def hittable() -> bool
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**示例:**
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
from kuaijs import node
|
|
271
|
+
|
|
272
|
+
selector = node.createNodeSelector()
|
|
273
|
+
|
|
274
|
+
# 查找并点击确定按钮
|
|
275
|
+
confirm_btn = selector.label("确定").type("XCUIElementTypeButton").getOneNodeInfo(3000)
|
|
276
|
+
|
|
277
|
+
if confirm_btn:
|
|
278
|
+
print(f"是否可接收事件: {confirm_btn.hittable()}")
|
|
279
|
+
|
|
280
|
+
clicked = confirm_btn.clickCenter()
|
|
281
|
+
if clicked:
|
|
282
|
+
print("成功点击确定按钮")
|
|
283
|
+
|
|
284
|
+
# 随机点击避免检测
|
|
285
|
+
confirm_btn.clickRandom()
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### 节点导航
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# 获取父节点
|
|
292
|
+
def parent() -> Optional[NodeInfo]
|
|
293
|
+
|
|
294
|
+
# 获取指定索引的子节点
|
|
295
|
+
def child(index: int) -> Optional[NodeInfo]
|
|
296
|
+
|
|
297
|
+
# 获取所有子节点
|
|
298
|
+
def allChildren() -> List[NodeInfo]
|
|
299
|
+
|
|
300
|
+
# 获取兄弟节点
|
|
301
|
+
def siblings() -> List[NodeInfo]
|
|
302
|
+
|
|
303
|
+
# 获取前面的兄弟节点
|
|
304
|
+
def previousSiblings() -> List[NodeInfo]
|
|
305
|
+
|
|
306
|
+
# 获取后面的兄弟节点
|
|
307
|
+
def nextSiblings() -> List[NodeInfo]
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**示例:**
|
|
311
|
+
|
|
312
|
+
```python
|
|
313
|
+
from kuaijs import node
|
|
314
|
+
|
|
315
|
+
selector = node.createNodeSelector()
|
|
316
|
+
|
|
317
|
+
# 查找输入框并获取其父容器
|
|
318
|
+
text_field = selector.type("XCUIElementTypeTextField").getOneNodeInfo(3000)
|
|
319
|
+
|
|
320
|
+
if text_field:
|
|
321
|
+
container = text_field.parent()
|
|
322
|
+
if container:
|
|
323
|
+
print(f"容器类型: {container.type}")
|
|
324
|
+
|
|
325
|
+
# 获取容器的所有子元素
|
|
326
|
+
children = container.allChildren()
|
|
327
|
+
print(f"容器包含 {len(children)} 个子元素")
|
|
328
|
+
|
|
329
|
+
# 查找同级的按钮
|
|
330
|
+
sibling_buttons = [n for n in children if n.type == "XCUIElementTypeButton"]
|
|
331
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Python API 使用教程
|
|
2
|
+
|
|
3
|
+
- `快点JS` 在 Python 环境中提供与 JS API 对齐的模块,模块名与 JS 保持一致。
|
|
4
|
+
|
|
5
|
+
- 导入方式:
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from kuaijs import action, hid, image, appleocr, paddleocr, yolo, system, device, file, mysql, netcard, ime, media, hotupdate, tomatoocr, tts, ui, utils, node, pip, logger
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 下载资源
|
|
12
|
+
|
|
13
|
+
- 官方网盘下载:[链接](https://pan.kuai.js.cn/#/_/%E5%BF%AB%E7%82%B9JS)
|
|
14
|
+
|
|
15
|
+
## nodejs 环境
|
|
16
|
+
|
|
17
|
+
`快点JS` 开发工具基于 nodejs 环境,因此需要先安装 nodejs 环境。
|
|
18
|
+
|
|
19
|
+
## python 环境
|
|
20
|
+
|
|
21
|
+
`快点JS` - Python 基于 Python3.14 版本,因此需要先安装 Python3.14 环境。
|
|
22
|
+
|
|
23
|
+
自行安装:`pip install kuaijs-ios` 以获取代码提示
|
|
24
|
+
|
|
25
|
+
## IDE 配置
|
|
26
|
+
|
|
27
|
+
### Visual Studio Code
|
|
28
|
+
|
|
29
|
+
`快点JS` 使用 Visual Studio Code 作为主要开发工具,并安装以下扩展:
|
|
30
|
+
|
|
31
|
+
#### 必需扩展
|
|
32
|
+
|
|
33
|
+
- **`快点JS开发工具`** - 提供 `快点JS` 相关功能,如创建项目、代码补全、图色工具、节点查找、打包软件包 等
|
|
34
|
+
|
|
35
|
+
#### 安装步骤
|
|
36
|
+
|
|
37
|
+
1. 打开 Visual Studio Code
|
|
38
|
+
2. 点击左侧扩展图标(或使用快捷键 `Ctrl+Shift+X`)
|
|
39
|
+
3. 在搜索框中输入 `快点JS开发工具`
|
|
40
|
+
<img src="/img/DevPlugin.jpg" width="800" alt="安装快点JS开发工具">
|
|
41
|
+
4. 点击安装按钮安装扩展
|
|
42
|
+
5. 安装完成后,重新启动 Visual Studio Code
|
|
43
|
+
|
|
44
|
+
## 创建项目
|
|
45
|
+
|
|
46
|
+
- 参照[创建 JS 项目](../quick/createProject.md)创建项目
|
|
47
|
+
|
|
48
|
+
- 创建项目时选择 `Python` 作为项目类型
|
|
49
|
+
|
|
50
|
+
## 标准库
|
|
51
|
+
|
|
52
|
+
Python 的标准库大部分都是支持的.
|
|
53
|
+
|
|
54
|
+
multiprocessing: ios 的沙盒模式限制.不能多次开辟进程.
|
|
55
|
+
|
|
56
|
+
## 第三方库
|
|
57
|
+
|
|
58
|
+
除了标准库外,我们也增加了一些常用的第三方库
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
"numpy==2.5.0",
|
|
62
|
+
"opencv-python==4.14.0"
|
|
63
|
+
"requests",
|
|
64
|
+
"websockets",
|
|
65
|
+
"PyMySQL"
|
|
66
|
+
```
|