294 lines
6.5 KiB
Markdown
294 lines
6.5 KiB
Markdown
# General Auto - 浏览器自动化控制扩展
|
||
|
||
## 简介
|
||
|
||
General Auto 是一个强大的 Chrome 浏览器自动化控制扩展,专为自动化测试和浏览器控制设计。
|
||
|
||
## 功能特性
|
||
|
||
### 核心功能
|
||
|
||
- ✅ 完整的页面元素操作(点击、输入、滚动等)
|
||
- ✅ Cookie 管理(获取、设置、清除)
|
||
- ✅ 请求拦截和日志记录(XHR、Fetch)
|
||
- ✅ 模拟人类行为(随机延迟、自然输入)
|
||
- ✅ 元素等待和检测
|
||
- ✅ 自定义脚本执行
|
||
- ✅ 任务队列管理
|
||
|
||
### API 功能
|
||
|
||
#### Content Script API (window.GeneralAuto)
|
||
|
||
```javascript
|
||
// 执行任务
|
||
await GeneralAuto.executeTask({
|
||
type: 'click',
|
||
selector: 'button#submit',
|
||
timeout: 5000
|
||
});
|
||
|
||
// 执行自定义脚本
|
||
await GeneralAuto.executeScript('document.title');
|
||
|
||
// Cookie 管理
|
||
const cookies = await GeneralAuto.getCookies();
|
||
await GeneralAuto.setCookies([...]);
|
||
await GeneralAuto.clearCookies();
|
||
|
||
// 导航
|
||
await GeneralAuto.navigateTo('https://example.com');
|
||
|
||
// 获取请求日志
|
||
const logs = await GeneralAuto.getRequestLogs();
|
||
```
|
||
|
||
#### Injected Script API (window.AutomationUtils)
|
||
|
||
```javascript
|
||
// 模拟人类输入
|
||
await AutomationUtils.humanInput(element, 'Hello World');
|
||
|
||
// 模拟人类点击
|
||
await AutomationUtils.humanClick(element);
|
||
|
||
// 等待元素
|
||
const el = await AutomationUtils.waitForElement('.selector', 5000);
|
||
|
||
// 等待元素消失
|
||
await AutomationUtils.waitForElementRemoved('.loading');
|
||
|
||
// 随机延迟
|
||
await AutomationUtils.randomDelay(100, 500);
|
||
|
||
// 监听请求
|
||
AutomationUtils.onRequest((data) => {
|
||
console.log('Request:', data);
|
||
});
|
||
|
||
// 监听响应
|
||
AutomationUtils.onResponse((data) => {
|
||
console.log('Response:', data);
|
||
});
|
||
```
|
||
|
||
## 任务类型
|
||
|
||
### 支持的任务类型
|
||
|
||
| 类型 | 说明 | 参数 |
|
||
|------|------|------|
|
||
| `click` | 点击元素 | `selector` |
|
||
| `input` | 输入文本 | `selector`, `value` |
|
||
| `humanInput` | 模拟人类输入 | `selector`, `value` |
|
||
| `getText` | 获取文本 | `selector` |
|
||
| `getAttribute` | 获取属性 | `selector`, `value`(属性名) |
|
||
| `scroll` | 滚动页面 | `value: {x, y}` |
|
||
| `scrollToElement` | 滚动到元素 | `selector` |
|
||
| `wait` | 等待指定时间 | `value`(毫秒) |
|
||
| `waitForElement` | 等待元素出现 | `selector` |
|
||
| `evaluate` | 执行 JavaScript | `value`(代码) |
|
||
|
||
### 任务示例
|
||
|
||
```javascript
|
||
// 点击按钮
|
||
await GeneralAuto.executeTask({
|
||
type: 'click',
|
||
selector: 'button[data-testid="submit"]',
|
||
timeout: 5000,
|
||
waitVisible: true
|
||
});
|
||
|
||
// 输入文本
|
||
await GeneralAuto.executeTask({
|
||
type: 'input',
|
||
selector: 'input[name="username"]',
|
||
value: 'myusername',
|
||
timeout: 5000
|
||
});
|
||
|
||
// 模拟人类输入
|
||
await GeneralAuto.executeTask({
|
||
type: 'humanInput',
|
||
selector: 'textarea',
|
||
value: 'This is a human-like typing',
|
||
timeout: 10000
|
||
});
|
||
|
||
// 获取文本
|
||
const result = await GeneralAuto.executeTask({
|
||
type: 'getText',
|
||
selector: '.title'
|
||
});
|
||
console.log(result.text);
|
||
|
||
// 滚动
|
||
await GeneralAuto.executeTask({
|
||
type: 'scroll',
|
||
value: { x: 0, y: 500 }
|
||
});
|
||
|
||
// 等待元素
|
||
await GeneralAuto.executeTask({
|
||
type: 'waitForElement',
|
||
selector: '.dynamic-content',
|
||
timeout: 10000
|
||
});
|
||
```
|
||
|
||
## 安装说明
|
||
|
||
### 1. 开发者模式安装
|
||
|
||
1. 打开 Chrome 浏览器
|
||
2. 访问 `chrome://extensions/`
|
||
3. 开启右上角的"开发者模式"
|
||
4. 点击"加载已解压的扩展程序"
|
||
5. 选择 `expand/general-auto` 文件夹
|
||
|
||
### 2. 在 Rod/Chromedp 中使用
|
||
|
||
```go
|
||
// 使用 Rod
|
||
browser := rod.New().
|
||
ControlURL(launcher.New().
|
||
Headless(false).
|
||
Set("load-extension", "d:\\Project\\go-account-register\\expand\\general-auto").
|
||
MustLaunch()).
|
||
MustConnect()
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
### Go 代码中使用
|
||
|
||
```go
|
||
// 在浏览器启动时加载扩展
|
||
func OpenBrowserWithExtension() *rod.Browser {
|
||
extensionPath := "d:\\Project\\go-account-register\\expand\\general-auto"
|
||
|
||
browser := rod.New().
|
||
ControlURL(launcher.New().
|
||
Headless(false).
|
||
Set("load-extension", extensionPath).
|
||
MustLaunch()).
|
||
MustConnect()
|
||
|
||
return browser
|
||
}
|
||
|
||
// 在页面中执行自动化任务
|
||
func AutomateTwitterPost(page *rod.Page, content string) error {
|
||
// 等待扩展加载
|
||
time.Sleep(2 * time.Second)
|
||
|
||
// 执行任务
|
||
_, err := page.Eval(`
|
||
(async () => {
|
||
// 等待输入框
|
||
await GeneralAuto.executeTask({
|
||
type: 'waitForElement',
|
||
selector: '[data-testid="tweetTextarea_0"]',
|
||
timeout: 10000
|
||
});
|
||
|
||
// 输入内容
|
||
await GeneralAuto.executeTask({
|
||
type: 'humanInput',
|
||
selector: '[data-testid="tweetTextarea_0"]',
|
||
value: ` + "`" + content + "`" + `,
|
||
timeout: 15000
|
||
});
|
||
|
||
// 点击发布按钮
|
||
await GeneralAuto.executeTask({
|
||
type: 'click',
|
||
selector: '[data-testid="tweetButtonInline"]',
|
||
timeout: 5000
|
||
});
|
||
|
||
return true;
|
||
})()
|
||
`)
|
||
|
||
return err
|
||
}
|
||
```
|
||
|
||
### 页面控制台中使用
|
||
|
||
```javascript
|
||
// 1. 点击登录按钮
|
||
await GeneralAuto.executeTask({
|
||
type: 'click',
|
||
selector: 'button.login-btn'
|
||
});
|
||
|
||
// 2. 等待登录框出现
|
||
await GeneralAuto.executeTask({
|
||
type: 'waitForElement',
|
||
selector: '#login-modal'
|
||
});
|
||
|
||
// 3. 输入用户名
|
||
await GeneralAuto.executeTask({
|
||
type: 'humanInput',
|
||
selector: 'input[name="username"]',
|
||
value: 'myusername'
|
||
});
|
||
|
||
// 4. 输入密码
|
||
await GeneralAuto.executeTask({
|
||
type: 'humanInput',
|
||
selector: 'input[name="password"]',
|
||
value: 'mypassword'
|
||
});
|
||
|
||
// 5. 点击提交
|
||
await GeneralAuto.executeTask({
|
||
type: 'click',
|
||
selector: 'button[type="submit"]'
|
||
});
|
||
```
|
||
|
||
## 配置选项
|
||
|
||
### 请求拦截配置
|
||
|
||
```javascript
|
||
// 控制请求拦截
|
||
window.GeneralAutoConfig = {
|
||
interceptXHR: true, // 拦截 XHR 请求
|
||
interceptFetch: true, // 拦截 Fetch 请求
|
||
logRequests: true, // 记录请求日志
|
||
requestCallbacks: [], // 请求回调
|
||
responseCallbacks: [] // 响应回调
|
||
};
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 扩展需要在浏览器启动时加载
|
||
2. 某些网站可能检测自动化行为,建议使用人类模拟功能
|
||
3. 请求日志会占用内存,定期清理
|
||
4. 开发模式下扩展可能需要手动刷新
|
||
|
||
## 更新日志
|
||
|
||
### v1.0.0 (2025-01-21)
|
||
|
||
- ✨ 初始版本发布
|
||
- ✅ 实现基础自动化功能
|
||
- ✅ 添加 Cookie 管理
|
||
- ✅ 添加请求拦截
|
||
- ✅ 添加人类行为模拟
|
||
|
||
## 许可证
|
||
|
||
MIT License
|
||
|
||
## 支持
|
||
|
||
如有问题,请联系开发团队。
|