新增通用的浏览器自动化扩展插件

This commit is contained in:
zyj
2025-11-21 14:09:59 +08:00
parent 87a077d40c
commit b448227d3e
17 changed files with 2156 additions and 2 deletions

View File

@@ -0,0 +1,293 @@
# 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
## 支持
如有问题,请联系开发团队。