你知唔知我系靓仔

自动化框架接口

浏览器自动化服务

一个基于 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                   # 环境变量配置
安装
  1. 创建虚拟环境

    python -m venv venv
    source venv/bin/activate  # Linux/Mac
    venv\Scripts\activate     # Windows
  2. 安装依赖

    pip install -r requirements.txt
  3. 配置环境变量

    复制 .env.example.env 并根据需要修改配置。

使用方法
  1. 启动服务

    python app.py
  2. API 端点

    • 状态检查GET /api/status
    • 访问URLGET /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_typeattribute 时的属性名
示例配置
{
    "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 中,我们增强了选择器处理功能,支持多种匹配方式和更灵活的选择逻辑。

主要更新
  1. 增强了 _handle_select 方法,支持多种匹配方式:

    • exact:精确匹配
    • startsWith:前缀匹配
    • contains:包含匹配
    • endsWith:后缀匹配
  2. 添加了自定义选择逻辑,处理非标准下拉框:

    • 支持通过 option_selector 自定义选项选择器
    • 使用 JavaScript 实现更灵活的选项匹配
  3. 添加了 use_native 参数,控制是否使用原生 Select

现在你可以这样配置选择操作:

{
    "type": "select",
    "selector": ".arco-select",
    "option_selector": ".arco-select-option",
    "value": "2024BlackFriday",
    "match_type": "startsWith",
    "use_native": false
}

这样就可以实现只匹配选项文本的开头部分,而不需要完全匹配。