ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

十个开源自动化工具实战:从Playwright到RPA搭出可试用流程

十个开源自动化工具实战:从Playwright到RPA搭出可试用流程 最近在各处逛开源社区时我发现一个挺特别的现象很多自动化工具本身质量不错但大家普遍卡在同一个位置上——工具装好了demo 跑通了然后就不知道怎么往下走了更谈不上把它变成一条能交给别人、甚至能日常复用的流程。这期周刊我就围绕“开源工具 自动化”这个主线选出十个我实测过、能快速上手、又能拼成完整自动化流程的开源工具。先不急着堆概念我的想法很直接每个工具解决什么痛点、适合什么场景、放到一条完整流程里它扮演什么角色这些讲清楚远比列一堆 GitHub Star 数字有用。不卖关子先交代一下这批工具要怎么“用”起来。它们不是十个互不相干的软件而是一个可以自由拼装的工具箱有做浏览器自动化测试的、有做接口断言与报告输出的、有做移动端真机操控的、有做运维批量执行的、有做低代码 RPA 的还有做流程调度和图像识别的。只要你愿意花一个下午把它们串起来就能搭出一条“采集 → 校验 → 调度 → 通知”的可试用流程这正是标题里所谓“可试用”的真正含意——不只是自己电脑上能跑而是换台机器、换个人也能跟着文档跑通。1. 为什么强调“可试用流程”1.1 工具是零件流程才是产品我见过不少朋友收藏了一百多个自动化工具真正用起来的没几个原因很简单工具只是单个零件流程才是能解决问题的产品。单个 Playwright 脚本能帮你打开网页、点击按钮但它不会告诉你数据对不对不会定时去跑更不会把异常结果推到你手机上。只有把“执行、校验、调度、通知”这些环节拼起来自动化才从“玩具”变成“工具”。打个比方这就像做饭面粉、鸡蛋、烤箱都是零件但把它们按顺序组合、设定温度和时间才叫烤面包。开源自动化的难点从来不是某个工具不会用而是不知道每个工具负责哪一环、它们之间的衔接怎么设计。“可试用流程”要求的是整套东西可复制、可移植、可交接不是只在你自己的环境里跑得通。1.2 选这十个工具的底层逻辑这十个工具不是我随手凑的是按一条自动化流程的各个环节来挑的界面操作需要能跨浏览器、跨平台的自动化框架数据校验需要强大的断言与测试报告体系移动端场景需要真机驱动批量服务器管理需要无代理的运维利器非程序员需要低代码 RPA周期执行需要调度器特殊场景还需要图像识别做辅助。我把它们分成四类这也是我推荐任何自动化项目的选型顺序分类工具解决的问题界面自动化与测试Playwright、pytest、Appium、SeleniumBase浏览器、接口、移动端、反爬对抗运维自动化与批量执行Ansible多台服务器配置与部署低代码与办公自动化影刀 RPA、AutoHotkey、Node-RED非程序员流程编排、桌面操作、可视化连线辅助能力OpenCV、Airflow图像识别定位、周期调度此外还有一层考量这些工具几乎都自带“免费试用”属性。开源协议允许你下载后立刻在本地跑通再决定是否深入不像商业软件上来先要 license。这正是开源自动化最大的优势——试错成本极低完全符合“可试用流程”这个理念。2. 十个开源工具核心定位与能力拆解2.1 界面自动化与测试Playwright、pytest、Appium、SeleniumBase先说 Playwright它是微软开源的新一代浏览器自动化框架支持 Chromium、Firefox、WebKit 三种内核。相比 Selenium 最让我舒服的一点是它不需要单独装驱动没有那种“Chrome 升级后 driver 版本又不匹配”的糟心事。它的自动等待机制也是默认的——元素没出现它就等不用像以前那样写一堆sleep(2)脚本稳定性提升非常明显。自动化测试框架 pytest 则是 Python 生态里的测试标杆几乎什么都能测。接口测试用requests发请求、用 pytest 做断言与用例组织想生成报告就配 Allure 或 pytest-html做数据驱动就用pytest.mark.parametrize。我习惯把它作为“校验层”让自动化流程跑完后自动判断结果是否符合预期数据对不上就直接标红。Appium 负责移动端自动化它是基于 WebDriver 协议的简单说就是把“操作浏览器”那套方式搬到手机上支持 Android 和 iOS。跑 iOS 需要 Mac XcodeAndroid 则只需 ADB 连接用 Appium Inspector 可以像浏览器开发者工具一样查看 App 的控件树定位元素很方便。最后一个 SeleniumBase 可以理解成 Selenium 的“完全增强版”内置了 CDP 模式、网页数据提取、反检测工具、pytest 集成还自带一套浏览器驱动管理器。做爬虫时它能有效降低被网站反爬机制拦截的概率配合代理和 stealth 模式爬数据比裸 Requests 稳得多。这四个工具的分工可以这样理解想上浏览器 ui 自动化首选 Playwright想跑接口测试和数据校验用 pytest 最顺手折腾手机 App 自动化就上 Appium遇到页面反爬对抗比较严重时SeleniumBase 是你的底牌。2.2 自动化运维与批量执行AnsibleAnsible 是最流行的开源运维自动化工具之一核心特点就两个字无代理。被管理机器上不需要提前装 agent你只要确保它能通过 SSH 连接、有 Python 环境即可。配合它的 Playbook 语法一种描述性配置语法告诉你“我希望服务器达到什么状态”可以让同一套运维配置在多台机器上完全一致地执行。它的“幂等性”设计也很了得。所谓幂等是指一条任务无论执行一次还是执行一百次最终结果都一样。比如你写一个“确保 nginx 已安装”的 Playbook第一遍跑会装软件第二遍跑发现已装就直接跳过。这对生产环境是至关重要的因为没人敢反复执行一个每次都产生副作用的脚本。配合 Ansible Galaxy 复用社区角色能快速搭起一套可交付的服务器初始化流程。2.3 低代码与办公自动化影刀 RPA、AutoHotkey、Node-RED如果说上面那些偏程序员向影刀 RPA 则是我见过最“说人话”的国产自动化工具之一。它通过可视化拖拽组件完成鼠标键盘操作、Excel 处理、网页数据抓取、软件间数据搬运对完全不懂代码的人非常友好。典型场景比如每天定时登录系统 → 下载报表 → 改文件名 → 发邮件整个过程用影刀的图形化编辑界面排列即可。AutoHotkey 是 Windows 桌面端的脚本利器。它体积极小、启动极快擅长热键切换和桌面窗口操作。我有时会用 AHK 为一些重复性办公动作做快捷键比如一键把当前窗口置顶一键在多个剪贴板内容间切换非常省心。它跟 RPA 的区别在于RPA 组件拖拽适合做重量级流程AHK 轻量脚本适合做日常效率小物件。Node-RED 则是低代码“流程编排”工具基于浏览器的可视化画布拖几个节点把它们连起来就能实现自动化工作流。它非常适合做 IoT 数据接力和 API 聚合比如将网页请求节点接收到的数据经过函数节点处理再接入数据库节点存储几分钟就能完成一个简单数据管道原型。它和影刀不冲突区别只在于 Node-RED 更偏 IT 与系统集成影刀更偏业务操作界面。2.4 辅助能力OpenCV 与 AirflowOpenCV 是计算机视觉领域无可替代的开源库在自动化中常被用作“视觉定位”手段。有些软件界面元素无法通过标准控件识别但可以在屏幕上截取模板图片用 OpenCV 的模板匹配算法定位坐标再交给 RPA 或脚本去点击。我用它做过一个很实用的例子根据游戏屏上的血条颜色判断状态并自动操作思路同样适用于“连连看游戏自动化脚本”。不过这里要提醒一句任何自动化脚本都应用于正当场景别用在破坏游戏规则或侵犯他人权益的地方。Airflow 是 Apache 旗下老牌的工作流调度平台适合“有依赖关系的周期任务编排”。它能定义任务 DAG——本质上就是你规定好哪一步先跑、哪一步后跑、每天几点触发、失败是否重试。我拿它做数据自动化采集的“总导演”把 Python 脚本、Shell 命令、SQL 查询统统封装成任务节点统一由 Airflow 调度并输出日志。3. 三个最适合直接上手的实战拆解3.1 5分钟快速跑通 Playwright 浏览器自动化如果你之前没碰过 Playwright我建议按这个顺序操作先创建虚拟环境并安装依赖再写一个自动化脚本打开目标网址用page.locator()定位元素执行输入文本和点击操作最后打印结果验证流程。一个经典示例是自动搜索并抓取商品标题from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessTrue) # 无头模式 page browser.new_page() page.goto(https://example.com) page.fill(#search-box, 开源自动化) page.click(#search-btn) page.wait_for_selector(.item-title) items page.locator(.item-title).all_text_contents() print(items[:5]) browser.close()这里面有几个值得留心的底层逻辑。第一headlessTrue表示无头模式即不弹出浏览器窗口直接运行适合服务器环境调试时可以改成headlessFalse看着它操作直观发现问题。第二Playwright 的 locator 定位策略是自动等待的它会在元素出现前反复尝试因此脚本中没必要写多余的time.sleep。第三它还内置了一个录制器在命令行执行playwright codegen命令会同时弹出浏览器和代码生成面板你手动点几下页面它会自动生成对应代码这对新手简直友好到极致。3.2 pytest 搭建一个接口自动化巡检流程接口自动化是我日常用的最多的场景因为它性价比最高不用管界面、不用等页面加载只看请求和返回体断言数据是否符合预期即可。用 pytest 搭巡检流程的核心步骤包括定义测试用例、使用 requests 发请求、对状态码和业务字段做断言、用命令行参数和 fixture 管理测试环境、最后输出报告并加入定时任务。下面是一段简化的接口巡检用例可以直接复制改一改就能用import requests import pytest BASE_URL https://api.example.com pytest.fixture def session(): s requests.Session() s.headers.update({Authorization: Bearer your-token}) return s def test_order_status(session): resp session.get(f{BASE_URL}/order/10001) assert resp.status_code 200, f状态码异常: {resp.status_code} data resp.json() assert data[code] 0, f业务码异常: {data[msg]} assert data[data][status] in (pending, paid, shipped)测试函数内三条断言是有讲究的先查 HTTP 状态码确认网络链路通不通再查业务码确认服务器逻辑是否正确最后查数据字段确认返回内容是否满足上游需求。这种分层断言法能帮你在自动化跑挂时快速定位问题到底出在哪一层而不是抓瞎。运行上我建议配 Allure 报告pytest --alluredir ./results生成原始结果再用allure serve ./results打开可视化页面用例通过率、失败详情、响应耗时一眼就能看清。将命令行挂到服务器定时任务里就形成了你个人的接口自动化巡检流程。3.3 Ansible 批量初始化多台服务器如果你手里有十几台服务器手动登录逐台执行apt update apt upgrade会累到怀疑人生。Ansible 的价值就在这里。先装 Ansible然后在 inventory 文件里声明几台机器写一个 Playbook 描述“目标状态”执行一条命令即可批量完成初始化- hosts: all become: yes tasks: - name: 更新软件包索引 apt: update_cache: yes cache_valid_time: 3600 - name: 安装常用工具 apt: name: - curl - git - htop state: present - name: 启动并启用 cron 服务 systemd: name: cron state: started enabled: yes这里值得解释两个字段。become: yes表示执行任务时切换为特权用户类似执行 sudo这样才有权限安装软件和启服务cache_valid_time: 3600是一个很实用的优化项意思是如果一小时内已经更新过软件源索引就跳过本次更新不会每次执行都卡在网络等待上。如果你的服务器是 CentOS 或 Ubuntu 不同版本只需把apt模块换成yum或dnf模块即可Ansible 会自动适配操作系统差异。3.4 用影刀 RPA 做一个“不需要写代码”的表格处理流程影刀 RPA 的上手门槛是真的低。举一个很常见的办公场景每天从企业后台导出一张 Excel 订单表需要做数据清洗后发到钉钉群。用影刀实现就是新建流程 → 打开网页 → 登录后台 → 点击导出按钮 → 等待下载完成 → 打开 Excel → 删除多余列 → 另存为新的表格 → 调用钉钉群机器人发送文件。每一个环节都有现成的可视化组件不需要敲一行代码鼠标拖拽组件、填写参数即可。特别提醒一点影刀在运行之前会要求你录制网页元素第一次录的时候尽量给输入框、按钮起好识别名称这样后续维护流程时定位会很明确。影刀也支持直接调用 Python 代码块扩展能力等于给非程序员留了一条后路——简单流程用组件拼复杂逻辑用代码块兜底非常灵活。4. 把工具串成一条完整可试用流程4.1 目标场景定时监测商品价格并自动推送提醒我认为最能体现实战价值的一个示例场景是每天定时监测指定商品的页面价格当价格低于心理价位时自动推送提醒到手机或群。这个流程可以完美串联前面讲到的多个工具而且每一步都有明确的输出物。工具分工是这样的Playwright 负责访问目标商品页面模拟普通用户行为并抓取价格文本pytest 负责校验抓取到的价格是否为数字、是否落在合理区间防止页面结构变化后抓到一堆乱码还当正常数据用Airflow 负责每天早上定时触发整个任务并按依赖顺序执行当价格达到条件时通过 Webhook 调用企业微信或钉钉机器人的 API 发送通知。4.2 分步实现与衔接细节先把商品 URL 列表和期望价格写在配置文件中这样换商品不用改代码。接着实现 Playwright 采集函数用 CSS 选择器直接提取价格元素文本然后写一个 pytest 测试函数检查抓取结果。再写一个判断函数如果当前价格低于阈值就调用机器人 Webhook 推送一条格式化消息。最后在 Airflow 中配置一个每日定时 DAG任务依赖顺序是“采集 → 校验 → 判断 → 推送”其中任何一步失败都触发重试并输出告警日志。这里面有一个非常容易踩的坑网页价格数据往往带有千位分隔符、货币符号甚至换行符直接float(text)会直接报错。我实际操作中都会先做一个数据清洗函数把所有非数字字符去掉再转浮点。千万别小看这个细节我第一次跑定时任务时就是因为一个空格字符整条管道在转化数据时挂了大半夜。4.3 如何让别人也能“试用”你的流程要做到可试用光把代码跑通是远远不够的我认为核心是“换台干净电脑也能快速复现”。建议按以下目录结构保管项目auto-price-monitor/ ├── README.md # 项目说明、环境要求、启动方式 ├── requirements.txt # Python 依赖清单 ├── config.yaml # 商品链接、阈值、企业微信机器人 key ├── collector.py # Playwright 数据采集 ├── validator.py # 价格判断与数据校验 ├── notifier.py # 消息推送 └── dags/ └── price_monitor.py # Airflow 调度定义README 中必须写清楚系统要求、Python 版本、首次启动需要执行的命令、以及如何配置密钥。更进一步如果涉及大量第三方依赖建议直接给出一份 Dockerfile 或 docker-compose.yml把整个环境连同调度器封装进容器。这样一来“可试用”就不再依赖于别人的具体环境一条命令就能把整套自动化流程拉起来这是我从多次交接项目里总结出的最高性价比做法。5. 常见问题与排查心得5.1 环境反复装不上大概率是驱动或权限问题装 Playwright 时报错最常见的有两类第一类是缺少系统依赖比如在干净 Linux 容器里运行会提示缺一堆 so 文件解决办法是执行playwright install-deps它会帮你自动补齐第二类是浏览器内核没有下载执行playwright install chromium就能拉取对应版本。注意这两个命令是按顺序执行的先装依赖再拉浏览器缺哪一个都会导致运行失败。5.2 页面元素定位失败问题可能在等待策略上很多自动化脚本跑着跑着突然报“元素找不到”大多数时候不是元素真的不存在而是脚本执行得太快、页面还没渲染完。Playwright 的自动等待已经缓解了大部分问题但页面是异步渲染时就仍有隐患。我的排查思路是先加page.wait_for_selector()或者等待某个网络空闲事件再尝试点击操作。另外要特别注意 iframe 和 shadow DOM 内元素的定位它们不在主文档节点树里必须用专门的 frame 定位器或穿透 shadow root 才能找到不然怎么改选择器都白费。5.3 RPA 脚本在别人电脑上跑不了多半是环境差异同一个影刀 RPA 流程在自己电脑上好好的换台电脑就跑崩常见的诱因有三个显示器分辨率不同导致录制的屏幕坐标偏移、目标软件版本不同导致控件树变化、系统权限不足导致无法完成点击或键入。解决办法是录制时优先采用“元素识别”而不是“屏幕坐标”方式流程中主动设置窗口大小并等待界面加载完成在文档中明确说明目标软件版本。如果是敏感操作还必须在运行前确认 RPA 工具本身符合你所在公司的安全合规要求。5.4 Ansible 连接失败先查 SSH 和 Python 环境Ansible 连接不上被管理机时我建议按这个顺序排查先确认当前机器能否直接通过 SSH 访问目标机如果手动 SSH 都不行Ansible 必然连不上。接着确认目标机是否安装了 Python 3Ansible 的核心模块都要在目标机上用 Python 解释器执行。最后检查特权模式若配置了become但当前用户没有对应的权限任务会卡在权限不足。这些都属于环境问题不是代码逻辑问题排查时别一头扎进 Playbook 里找 bug。5.5 字符编码与中文路径——最隐蔽的坑自动化脚本开发中最常见却最隐蔽的一类问题就是字符编码。下载文件路径里面有中文打开 Excel 时数据读乱码发送请求时字段编码不一致导致业务方解析失败这些都是我踩过的坑。Python 里统一使用pathlib.Path处理路径、在读写文件时显式指定encodingutf-8、HTTP 请求头里声明charsetutf-8基本能规避掉大多数编码问题。Windows 环境下尤其要注意 PowerShell 和 cmd 的默认编码差异否则一个 print 输出可能直接让你的定时任务日志变成天书。我个人的体会是做自动化最忌讳一上来就追求“万能框架”先把一条最简单的端到端流程跑通再慢慢把更多场景加进去。工具永远是替你做事的真正决定流程是否好用的是你对业务细节的理解。这十个开源工具我不指望你全都用上能挑两三个解决你手头最痛的问题这期周刊就没白写。后面如果有机会我会再整理一下这些工具之间如何做统一认证与权限管理那才是企业级自动化流程真正会遇到的硬骨头。
返回列表