MagicBox
在今年迎来了升级,依托于Automa
灵活的工作流配置,可以很方便的实现网站的自动化任务。Automa
是一个浏览器控制插件,有着众多的组件,基本涵盖了日常的操作,只需要拖拉连线便可将打开网页、点击链接、获取元素的文本等等拼接成一个工作流话不,实现复杂任务的简化执行,但,如果想让其在服务端每日自动执行,不必依赖本地的插件环境,是否可行呢?
新版MagicBox
的主要任务都会使用Automa
来实现,实践的过程中是发现了一些问题的,例如登录态、通知、代码处理逻辑不一致等问题,对于迁移使用仍然会有一定的理解难度。
在最新的2.2.2
版本中,我们新加了cli
命令模式,内置了部分任务标准模版,只需根据命令引导,即可生成专属于自己的任务,极大的简化了使用MagicBox
。
项目地址:https://github.com/srcrs/MagicBox
MagicBox
├── Dockerfile
├── LICENSE
├── MagicBox.log
├── README.md
├── cmd
├── configs
├── docker-compose.yml
├── examples
├── go.mod
├── go.sum
├── install.sh
├── main.go
├── public
├── script.sh
├── utils
└── workerflow
- examples: 有示例配置文件通过cli命令可以重复使用
- configs: 用于放置需要执行的automa配置文件
- docker-compose.yml: docker-compose配置文件,实时获取最新的版本
- MagicBox.log: 工作流执行后的日志文件
- main.go: 工作流解析引擎执行入口
- utils、workerflow: 解析引擎相关核心代码逻辑
- conditions:条件判断
- event-click:点击
- get-text:获取文本
- insert-data:插入变量
- loop-data:循环获取数据
- new-tab:打开网页
- webhook:调用接口
- tab-url:获取当前页面url
- element-scroll:滚动页面到屏幕最下面
- delay:流程sleep
- loop-elements:循环遍历页面元素
- forms:设置form表单填写内容
- reload-tab:刷新当前页面
- close-tab:关闭当前页面
- link:获取网页中链接打开页面
- active-tab:回到活动tab页中
- attribute-value:获取标签成员值
_ | 站点 | 说明 | 登录授权方式 | username | password | brakUrl | cron | ip |
---|---|---|---|---|---|---|---|---|
hostloc_get_integral | https://hostloc.com/ | 每日访问空间刷积分 | 账号密码 | yes | yes | yes | yes | yes |
jd_apply_refund | https://www.jd.com/ | 京东自动申请价格保护 | cookie | no | no | yes | yes | yes |
v2ex_sign | https://v2ex.com/ | 每日签到 | cookie | no | no | yes | yes | yes |
wxread_task | https://weread.qq.com/ | 每日登录阅读,完成读书挑战 | cookie | no | no | yes | yes | yes |
bilibili_task | https://www.bilibili.com/ | 哔哩哔哩每日任务,登录、观看视频 | cookie | no | no | yes | yes | yes |
docker环境安装参考官方教程,一键把docker和docker-compose环境都安装好。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
安装好后,示例docker版本信息。
$ docker --version
Docker version 24.0.4
$ docker compose version
Docker Compose version v2.19.1
git clone https://github.com/srcrs/MagicBox.git
克隆完后,进入到MagicBox文件夹中。
目前支持两种方式,通过内置任务初始化生成;导入自定义任务(可能存在部分节点未接入问题)。
- 帮助命令
#查看目前支持的命令
$docker compose run --rm -p 9222:9222 server -h
#查看目前支持的config命令
$docker compose run --rm -p 9222:9222 server config -h
#查看目前支持的初始化任务
$docker compose run --rm -p 9222:9222 server config init -h
- 可传入参数
变量名 | 说明 | 使用示例 |
---|---|---|
username | 登录用户名 | --username "xxxxxx" |
password | 登录密码 | --password "xxxxxxx" |
barkUrl | 通知 | --barkUrl "xxxxxxx" |
cron | 定时执行 | --cron "12 12 * * *" |
ip | chrome远程ip地址 | --ip 127.0.0.1 |
- 真实案例
初始化一个v2ex任务。
#1.选择初始化v2ex任务,设置定时执行时间和bark通知
$docker compose run --rm -p 9222:9222 server config init v2ex_sign --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx"
It will close in 150 seconds
please visit url: http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/333BE3874077691C51A4279C7A4E8AB9
#2.将locahost替换为服务器ip后在浏览器访问,即可远程控制,在150秒内完成登录操作
#3.150秒后将会检查登录情况,会自动将配置文件添加到configs文件夹中
new config path: configs/v2ex_sign_7656fbd2-78dc-4cff-af18-e56c40b8e527.json
更多请参考:使用示例
将automa编写好的配置从插件中导出,再导入至MagicBox中,适合有一定的使用经验。
#进入到MagicBox目录
docker compose up -d
$docker compose run --rm -p 9222:9222 server config init v2ex_sign --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx" --ip 127.0.0.1
$docker compose run --rm -p 9222:9222 server config init hostloc_get_integral --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx" --username "xxxxxxx" --password "yyyyyyy" --ip 127.0.0.1
$docker compose run --rm -p 9222:9222 server config init jd_apply_refund --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx" --ip 127.0.0.1
$docker compose run --rm -p 9222:9222 server config init wxread_task --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx" --ip 127.0.0.1
$docker compose run --rm -p 9222:9222 server config init bilibili_task --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx" --ip 127.0.0.1
Automa是本地执行,在实际迁移使用时,需要考虑到登录态问题,定时任务、用户名和密码登录等,也有相应的使用规范。
使用insert-data
组件,选择添加Variable变量,名称为cookies
,一般要在页面打开之前将cookie加载进去。
修改Trigger
组件,添加一个Cron job
,就可以设置cron定时任务了。MagicBox加载逻辑是,程序首次都会执行一次,后续是根据定时任务的设置执行。
使用的组件是Forms
,使用Text field
填写内容,用户名是username
,密码是password
。
automa的HTTP request
可以实现接口的调用,正好可以满足通知的需求,但是通知的内容可能会很少,无法做到代码方式灵活。
Bark 是一款iOS
端的推送服务,通过部署一个Server
服务端,可以通过HTTP接口来给iOS
设备发送推送通知,代码开源: https://github.com/Finb/Bark
使用极其简单,只需要下载安装Bark软件即可,获取每个用户唯一key,按照下面格式替换,就得到了你唯一的推送通道了。一般将Bark的链接替换到组件中即可。
https://api.day.app/DnzTsd6qDWTdfs9xRGygFtasdnsRCL/
详细可参考:Bark官方文档
网站禁止调试,需要关闭,解决方案地址:https://stackoverflow.com/questions/12833514/paused-in-debugger-in-chrome%EF%BC%9B
一般关闭图中红圈处即可解决。