{"id":19540630,"url":"https://github.com/srcrs/magicbox","last_synced_at":"2025-04-05T15:10:08.729Z","repository":{"id":152972715,"uuid":"625542909","full_name":"srcrs/MagicBox","owner":"srcrs","description":"一个基于chrome的自动执行定时任务，目前支持B站、v2ex、hostloc、jd等网站的签到","archived":false,"fork":false,"pushed_at":"2024-08-05T14:25:00.000Z","size":38912,"stargazers_count":406,"open_issues_count":17,"forks_count":39,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-29T14:12:48.716Z","etag":null,"topics":["auto","checkin","chrome","sign","task"],"latest_commit_sha":null,"homepage":"https://blog.lass.cc/posts/how-use-magic-box-v2/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srcrs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-09T12:48:38.000Z","updated_at":"2025-03-25T20:45:20.000Z","dependencies_parsed_at":"2024-05-18T03:24:06.730Z","dependency_job_id":"af95b93b-9cea-4bb5-b3ed-08e862f9606d","html_url":"https://github.com/srcrs/MagicBox","commit_stats":null,"previous_names":["srcrs/magicbox"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srcrs%2FMagicBox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srcrs%2FMagicBox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srcrs%2FMagicBox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srcrs%2FMagicBox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srcrs","download_url":"https://codeload.github.com/srcrs/MagicBox/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247353749,"owners_count":20925329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto","checkin","chrome","sign","task"],"created_at":"2024-11-11T03:05:17.016Z","updated_at":"2025-04-05T15:10:08.712Z","avatar_url":"https://github.com/srcrs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e \n\u003ch1 align=\"center\"\u003eMagicBox\u003c/h1\u003e\n\u003cimg src=\"public/img/head.png#pic_center\" width=\"200\" height=\"200\"\u003e\n\u003cbr/\u003e\n\u003cimg src=\"https://img.shields.io/github/issues/srcrs/MagicBox?color=green\"\u003e\n\u003cimg src=\"https://img.shields.io/github/stars/srcrs/MagicBox?color=yellow\"\u003e\n\u003cimg src=\"https://img.shields.io/github/forks/srcrs/MagicBox?color=orange\"\u003e\n\u003cimg src=\"https://img.shields.io/github/license/srcrs/MagicBox?color=ff69b4\"\u003e\n\u003cimg src=\"https://img.shields.io/github/search/srcrs/MagicBox/main?color=blue\"\u003e\n\u003c/div\u003e\n\n## 简述\n\n`MagicBox`在今年迎来了升级，依托于`Automa`灵活的工作流配置，可以很方便的实现网站的自动化任务。`Automa`是一个浏览器控制插件，有着众多的组件，基本涵盖了日常的操作，只需要拖拉连线便可将打开网页、点击链接、获取元素的文本等等拼接成一个工作流话不，实现复杂任务的简化执行，但，如果想让其在服务端每日自动执行，不必依赖本地的插件环境，是否可行呢？\n\n新版`MagicBox`的主要任务都会使用`Automa`来实现，实践的过程中是发现了一些问题的，例如登录态、通知、代码处理逻辑不一致等问题，对于迁移使用仍然会有一定的理解难度。\n\n在最新的`2.2.2`版本中，我们新加了`cli`命令模式，内置了部分任务标准模版，只需根据命令引导，即可生成专属于自己的任务，极大的简化了使用`MagicBox`。\n\n## 目录\n\n- [简述](#简述)\n- [目录](#目录)\n- [项目目录说明](#项目目录说明)\n- [已实现组件](#已实现组件)\n- [内置支持任务](#内置支持任务)\n- [环境要求](#环境要求)\n  - [Linux](#linux)\n    - [Docker](#docker)\n- [使用方法](#使用方法)\n  - [Docker部署](#docker部署)\n    - [1.克隆仓库](#1克隆仓库)\n    - [2.导入配置](#2导入配置)\n      - [使用内置命令初始化配置](#使用内置命令初始化配置)\n      - [自定义导入](#自定义导入)\n    - [3.执行部署](#3执行部署)\n- [使用示例](#使用示例)\n  - [v2ex\\_sign](#v2ex_sign)\n  - [hostloc\\_get\\_integral](#hostloc_get_integral)\n  - [jd\\_apply\\_refund](#jd_apply_refund)\n  - [wxread\\_task](#wxread_task)\n  - [bilibili\\_task](#bilibili_task)\n- [开发贡献](#开发贡献)\n  - [加载cookie](#加载cookie)\n  - [定时执行](#定时执行)\n  - [用户登录](#用户登录)\n- [通知方式](#通知方式)\n  - [Bark](#bark)\n- [常见问题](#常见问题)\n  - [打开网站调试，提示paused in debugger](#打开网站调试提示paused-in-debugger)\n\n## 项目目录说明\n\n项目地址：https://github.com/srcrs/MagicBox\n\n```\nMagicBox\n├── Dockerfile\n├── LICENSE\n├── MagicBox.log\n├── README.md\n├── cmd\n├── configs\n├── docker-compose.yml\n├── examples\n├── go.mod\n├── go.sum\n├── install.sh\n├── main.go\n├── public\n├── script.sh\n├── utils\n└── workerflow\n```\n\n- examples: 有示例配置文件通过cli命令可以重复使用\n- configs: 用于放置需要执行的automa配置文件\n- docker-compose.yml: docker-compose配置文件，实时获取最新的版本\n- MagicBox.log: 工作流执行后的日志文件\n- main.go: 工作流解析引擎执行入口\n- utils、workerflow: 解析引擎相关核心代码逻辑\n\n## 已实现组件\n\n- conditions：条件判断\n- event-click：点击\n- get-text：获取文本\n- insert-data：插入变量\n- loop-data：循环获取数据\n- new-tab：打开网页\n- webhook：调用接口\n- tab-url：获取当前页面url\n- element-scroll：滚动页面到屏幕最下面\n- delay：流程sleep\n- loop-elements：循环遍历页面元素\n- forms：设置form表单填写内容\n- reload-tab：刷新当前页面\n- close-tab：关闭当前页面\n- link：获取网页中链接打开页面\n- active-tab：回到活动tab页中\n- attribute-value：获取标签成员值\n\n## 内置支持任务\n\n_ | 站点 | 说明 | 登录授权方式 | username | password | brakUrl | cron | ip\n-|-|-|-|-|-|-|-|-\nhostloc_get_integral | https://hostloc.com/ | 每日访问空间刷积分 | 账号密码 | yes | yes | yes | yes | yes\njd_apply_refund | https://www.jd.com/ | 京东自动申请价格保护 | cookie | no | no | yes | yes | yes\nv2ex_sign | https://v2ex.com/ | 每日签到 | cookie | no | no | yes | yes | yes\nwxread_task | https://weread.qq.com/ | 每日登录阅读，完成读书挑战 | cookie | no | no | yes | yes | yes\nbilibili_task | https://www.bilibili.com/ | 哔哩哔哩每日任务，登录、观看视频 | cookie | no | no | yes | yes | yes\n\n## 环境要求\n\n### Linux\n\n#### Docker\n\ndocker环境安装参考[官方教程](https://docs.docker.com/engine/install/debian/)，一键把docker和docker-compose环境都安装好。\n\n```bash\ncurl -fsSL https://get.docker.com -o get-docker.sh\nsudo sh get-docker.sh\n```\n\n安装好后，示例docker版本信息。\n\n```bash\n$ docker --version\nDocker version 24.0.4\n$ docker compose version\nDocker Compose version v2.19.1\n```\n\n## 使用方法\n\n### Docker部署\n\n#### 1.克隆仓库\n\n```bash\ngit clone https://github.com/srcrs/MagicBox.git\n```\n\n克隆完后，进入到MagicBox文件夹中。\n\n#### 2.导入配置\n\n目前支持两种方式，通过内置任务初始化生成；导入自定义任务（可能存在部分节点未接入问题）。\n\n##### 使用内置命令初始化配置\n\n- 帮助命令\n\n```bash\n#查看目前支持的命令\n$docker compose run --rm -p 9222:9222 server -h\n\n#查看目前支持的config命令\n$docker compose run --rm -p 9222:9222 server config -h\n\n#查看目前支持的初始化任务\n$docker compose run --rm -p 9222:9222 server config init -h\n```\n\n- 可传入参数\n\n变量名 | 说明 | 使用示例\n-|-|-\nusername | 登录用户名 | --username \"xxxxxx\"\npassword | 登录密码 | --password \"xxxxxxx\"\nbarkUrl | 通知 | --barkUrl \"xxxxxxx\"\ncron | 定时执行 | --cron \"12 12 * * *\"\nip | chrome远程ip地址 | --ip 127.0.0.1\n\n- 真实案例\n\n初始化一个v2ex任务。\n\n```bash\n#1.选择初始化v2ex任务，设置定时执行时间和bark通知\n$docker compose run --rm -p 9222:9222 server config init v2ex_sign --cron \"12 12 * * *\" --barkUrl \"https://bark.xxx.com/xxxxxx\"\nIt will close in 150 seconds\nplease visit url: http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/333BE3874077691C51A4279C7A4E8AB9\n\n#2.将locahost替换为服务器ip后在浏览器访问，即可远程控制，在150秒内完成登录操作\n\n#3.150秒后将会检查登录情况，会自动将配置文件添加到configs文件夹中\nnew config path: configs/v2ex_sign_7656fbd2-78dc-4cff-af18-e56c40b8e527.json\n```\n\n更多请参考：[使用示例](#使用示例)\n\n##### 自定义导入\n\n将automa编写好的配置从插件中导出，再导入至MagicBox中，适合有一定的使用经验。\n\n#### 3.执行部署\n\n```bash\n#进入到MagicBox目录\ndocker compose up -d\n```\n\n## 使用示例\n\n### v2ex_sign\n\n```bash\n$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\n```\n\n### hostloc_get_integral\n\n```bash\n$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\n```\n\n### jd_apply_refund\n\n```bash\n$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\n```\n\n### wxread_task\n\n```bash\n$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\n```\n\n### bilibili_task\n\n```bash\n$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\n```\n\n## 开发贡献\n\nAutoma是本地执行，在实际迁移使用时，需要考虑到登录态问题，定时任务、用户名和密码登录等，也有相应的使用规范。\n\n### 加载cookie\n\n使用`insert-data`组件，选择添加Variable变量，名称为`cookies`，一般要在页面打开之前将cookie加载进去。\n\n### 定时执行\n\n修改`Trigger`组件，添加一个`Cron job`，就可以设置cron定时任务了。MagicBox加载逻辑是，程序首次都会执行一次，后续是根据定时任务的设置执行。\n\n### 用户登录\n\n使用的组件是`Forms`，使用`Text field`填写内容，用户名是`username`，密码是`password`。\n\n## 通知方式\n\nautoma的`HTTP request`可以实现接口的调用，正好可以满足通知的需求，但是通知的内容可能会很少，无法做到代码方式灵活。\n\n### Bark\n\nBark 是一款`iOS`端的推送服务，通过部署一个`Server`服务端，可以通过HTTP接口来给`iOS`设备发送推送通知，代码开源: https://github.com/Finb/Bark\n\n使用极其简单，只需要下载安装Bark软件即可，获取每个用户唯一key，按照下面格式替换，就得到了你唯一的推送通道了。一般将Bark的链接替换到组件中即可。\n\n```bash\nhttps://api.day.app/DnzTsd6qDWTdfs9xRGygFtasdnsRCL/\n```\n\n详细可参考：[Bark官方文档](https://bark.day.app/)\n\n## 常见问题\n\n### 打开网站调试，提示paused in debugger\n\n网站禁止调试，需要关闭，解决方案地址：https://stackoverflow.com/questions/12833514/paused-in-debugger-in-chrome%EF%BC%9B\n\n一般关闭图中红圈处即可解决。\n\n![](https://i.sstatic.net/qTaMX.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrcrs%2Fmagicbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrcrs%2Fmagicbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrcrs%2Fmagicbox/lists"}