你知唔知我系靓仔
自动化框架接口
浏览器自动化服务
一个基于 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_TIMEOUT
optional
:(可选) 是否为可选操作,如果为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
:(可选) 是否在输入前清除原有内容,默认为true
press_enter
:(可选) 是否在输入后模拟回车键,默认为false
3. select
- 下拉框选择
{
"type": "select",
"selector": "#select",
"value": "选项值",
"by_value": true,
"by_text": false,
"by_index": false
}
by_value
:(可选) 通过value
属性选择,默认为true
by_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
}
这样就可以实现只匹配选项文本的开头部分,而不需要完全匹配。