你知唔知我系靓仔
自动化框架接口
浏览器自动化服务
一个基于 Flask 和 Selenium 的浏览器自动化服务,支持异步操作和自定义自动化规则。
功能特点
- 模块化设计:代码结构清晰,易于维护和扩展。
- 异步操作处理:支持异步操作,提升服务性能。
- 基于域名的自动化规则配置:灵活配置自动化规则,适应不同需求。
- 完整的日志记录系统:详细记录操作日志,便于问题排查。
- 环境变量配置支持:通过环境变量灵活配置应用参数。
- 全屏模式浏览器支持:支持全屏模式浏览器操作。
项目结构
.
├── app.py # 应用入口
├── config/ # 配置文件目录
│ ├── settings.py # 应用配置
│ └── automation_rules.json # 自动化规则配置
├── browser/ # 浏览器管理模块
│ └── browser_manager.py
├── automation/ # 自动化模块
│ ├── automation_config.py
│ └── automation_executor.py
├── routes/ # 路由模块
│ └── browser_routes.py
├── utils/ # 工具模块
│ └── logger.py
├── logs/ # 日志目录
├── downloads/ # 下载目录
├── requirements.txt # 项目依赖
└── .env # 环境变量配置
安装
-
创建虚拟环境:
python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows -
安装依赖:
pip install -r requirements.txt -
配置环境变量:
复制
.env.example到.env并根据需要修改配置。
使用方法
-
启动服务:
python app.py -
API 端点:
- 状态检查:
GET /api/status - 访问URL:
GET /api/visit/<url> - 带自动化操作的访问:
GET /api/visit/<url>?auto=true
- 状态检查:
自动化规则配置
在 config/automation_rules.json 中配置域名对应的自动化规则:
{
"example.com": [
{
"type": "wait_element",
"selector": "#login-form",
"timeout": 10
},
{
"type": "input",
"selector": "#username",
"value": "testuser"
}
]
}
支持的操作类型:
wait_element:等待元素出现input:输入文本click:点击元素select:下拉框选择delay:延时等待wait_download:等待下载完成
自动化框架文档
自动化规则配置文档
概述
automation_rules.json 文件用于配置基于域名的自动化操作规则。配置文件支持热更新,无需重启服务即可生效。
配置格式
{
"domain.com": [
{
"type": "操作类型",
"selector": "CSS选择器",
"value": "操作值",
"timeout": 10,
"optional": false
}
]
}
通用参数
所有操作类型都支持以下通用参数:
type:(必填) 操作类型selector:(部分必填) CSS选择器value:(部分必填) 操作值timeout:(可选) 超时时间,默认为配置文件中的DEFAULT_TIMEOUToptional:(可选) 是否为可选操作,如果为true则失败时继续执行,默认为false
支持的操作类型
1. click - 点击操作
{
"type": "click",
"selector": "#button",
"js_click": false
}
js_click:(可选) 是否使用JavaScript点击,处理某些特殊情况
2. input - 输入操作
{
"type": "input",
"selector": "#input",
"value": "要输入的文本",
"clear": true,
"press_enter": false
}
clear:(可选) 是否在输入前清除原有内容,默认为truepress_enter:(可选) 是否在输入后模拟回车键,默认为false
3. select - 下拉框选择
{
"type": "select",
"selector": "#select",
"value": "选项值",
"by_value": true,
"by_text": false,
"by_index": false
}
by_value:(可选) 通过value属性选择,默认为trueby_text:(可选) 通过显示文本选择by_index:(可选) 通过索引选择
4. wait_element - 等待元素
{
"type": "wait_element",
"selector": "#element",
"condition": "presence"
}
condition:(可选) 等待条件,可选值:presence:元素存在(默认)visible:元素可见clickable:元素可点击invisible:元素不可见
5. delay - 延时等待
{
"type": "delay",
"value": "1.5"
}
value:等待秒数
6. wait_download - 等待下载
{
"type": "wait_download",
"value": "30"
}
value:最大等待秒数
7. hover - 鼠标悬停
{
"type": "hover",
"selector": "#menu"
}
8. scroll - 滚动操作
{
"type": "scroll",
"selector": "#target",
"value": "100",
"scroll_type": "pixel"
}
scroll_type:(可选) 滚动类型:pixel:滚动指定像素bottom:滚动到底部top:滚动到顶部
9. switch_frame - 切换iframe
{
"type": "switch_frame",
"selector": "#frame"
}
- 使用
"selector": "default"切换回主框架
10. execute_script - 执行JavaScript
{
"type": "execute_script",
"value": "console.log('Hello');"
}
11. assert - 断言检查
{
"type": "assert",
"selector": "#element",
"value": "期望值",
"assert_type": "text",
"attribute_name": "data-value"
}
assert_type:(可选) 断言类型:text:检查元素文本(默认)value:检查元素value属性attribute:检查指定属性值
attribute_name:当assert_type为attribute时的属性名
示例配置
{
"example.com": [
{
"type": "wait_element",
"selector": "#login-form",
"condition": "visible",
"timeout": 10
},
{
"type": "input",
"selector": "#username",
"value": "testuser",
"press_enter": false
},
{
"type": "input",
"selector": "#password",
"value": "testpass",
"press_enter": true
},
{
"type": "click",
"selector": "#submit-btn",
"optional": true
}
]
}
增强选择器处理功能
在 automation/automation_executor.py 中,我们增强了选择器处理功能,支持多种匹配方式和更灵活的选择逻辑。
主要更新
-
增强了
_handle_select方法,支持多种匹配方式:exact:精确匹配startsWith:前缀匹配contains:包含匹配endsWith:后缀匹配
-
添加了自定义选择逻辑,处理非标准下拉框:
- 支持通过
option_selector自定义选项选择器 - 使用 JavaScript 实现更灵活的选项匹配
- 支持通过
-
添加了
use_native参数,控制是否使用原生Select。
现在你可以这样配置选择操作:
{
"type": "select",
"selector": ".arco-select",
"option_selector": ".arco-select-option",
"value": "2024BlackFriday",
"match_type": "startsWith",
"use_native": false
}
这样就可以实现只匹配选项文本的开头部分,而不需要完全匹配。