Coder Social home page Coder Social logo

srcrs / magicbox Goto Github PK

View Code? Open in Web Editor NEW
379.0 3.0 35.0 37.98 MB

一个基于chrome的自动执行定时任务,目前支持B站、v2ex、hostloc、jd等网站的签到

Home Page: https://blog.lass.cc/posts/how-use-magic-box-v2/

License: MIT License

Shell 3.60% Dockerfile 0.83% Go 95.57%
auto checkin chrome sign task

magicbox's Introduction

MagicBox

简述

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页中

内置支持任务

_ 站点 说明 登录授权方式 username password brakUrl cron
hostloc_get_integral https://hostloc.com/ 每日访问空间刷积分 账号密码 yes yes yes yes
jd_apply_refund https://www.jd.com/ 京东自动申请价格保护 cookie no no yes yes
v2ex_sign https://v2ex.com/ 每日签到 cookie no no yes yes
wxread_task https://weread.qq.com/ 每日登录阅读,完成读书挑战 cookie no no yes yes

环境要求

Linux

Docker

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

使用方法

Docker部署

1.克隆仓库

git clone https://github.com/srcrs/MagicBox.git

克隆完后,进入到MagicBox文件夹中。

2.导入配置

目前支持两种方式,通过内置任务初始化生成;导入自定义任务(可能存在部分节点未接入问题)。

使用内置命令初始化配置
  • 帮助命令
#查看目前支持的命令
$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 * * *"
  • 真实案例

初始化一个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中,适合有一定的使用经验。

3.执行部署

#进入到MagicBox目录
docker compose up -d

使用示例

v2ex_sign

$docker compose run --rm -p 9222:9222 server config init v2ex_sign --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx"

hostloc_get_integral

$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"

jd_apply_refund

$docker compose run --rm -p 9222:9222 server config init jd_apply_refund --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx"

wxread_task

$docker compose run --rm -p 9222:9222 server config init wxread_task --cron "12 12 * * *" --barkUrl "https://bark.xxx.com/xxxxxx"

开发贡献

Automa是本地执行,在实际迁移使用时,需要考虑到登录态问题,定时任务、用户名和密码登录等,也有相应的使用规范。

加载cookie

使用insert-data组件,选择添加Variable变量,名称为cookies,一般要在页面打开之前将cookie加载进去。

定时执行

修改Trigger组件,添加一个Cron job,就可以设置cron定时任务了。MagicBox加载逻辑是,程序首次都会执行一次,后续是根据定时任务的设置执行。

用户登录

使用的组件是Forms,使用Text field填写内容,用户名是username,密码是password

通知方式

automa的HTTP request可以实现接口的调用,正好可以满足通知的需求,但是通知的内容可能会很少,无法做到代码方式灵活。

Bark

Bark 是一款iOS端的推送服务,通过部署一个Server服务端,可以通过HTTP接口来给iOS设备发送推送通知,代码开源: https://github.com/Finb/Bark

使用极其简单,只需要下载安装Bark软件即可,获取每个用户唯一key,按照下面格式替换,就得到了你唯一的推送通道了。一般将Bark的链接替换到组件中即可。

https://api.day.app/DnzTsd6qDWTdfs9xRGygFtasdnsRCL/

详细可参考:Bark官方文档

magicbox's People

Contributors

srcrs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

magicbox's Issues

请教有道云笔记签到方法

感谢您的项目。已经部署成功。参考 - 双十一京东自动申请价保助手 | Doduo' Site 教程,成功完成京东价保的设置。

我的问题是:

  1. 青龙面板中,脚本管理 - jd脚本的 cron 和 定时任务 - jd task 的定时规则 ,功能是重复的吗?
    教程中
    jd脚本 cron: '0 41 8,16 ** *'
    jd task 定时规则:10 10 */2 * * *

2. 有道云笔记的签到是否也需要在定时任务中添加:MagicBox/MagicBox_amd64_linux youdao exec
[更新]:有道云笔记签到成功了

构建失败

Screenshot_2024-04-06-06-51-06-71_61c78dc80ee02b53007c815fefe993e3
[server builder 2/4] COPY . /src 1.9s
=> [server builder 3/4] WORKDIR /src 0.1s
=> ERROR [server builder 4/4] RUN go build 482.1s
=> [server stage-1 2/4] RUN apt-get update 116.0s

[server builder 4/4] RUN go build -ldflags "-s -w" -o ./bin/MagicBox .:
0.217 go: downloading github.com/tidwall/gjson v1.17.1
0.221 go: downloading github.com/DataHenHQ/useragent v0.1.0
30.27 go: downloading github.com/chromedp/cdproto v0.0.0-20240214232516-ad4608604e9e
60.30 go: downloading github.com/chromedp/chromedp v0.9.5
60.30 go: downloading github.com/robfig/cron/v3 v3.0.1
90.32 go: downloading go.uber.org/zap v1.24.0
120.4 go: downloading gopkg.in/natefinch/lumberjack.v2 v2.2.1
120.6 go: downloading github.com/google/uuid v1.6.0
482.1 utils/proxy.go:6:2: github.com/DataHenHQ/[email protected]: Get "https://proxy.golang.org/github.com/%21data%21hen%21h%21q/useragent/@v/v0.1.0.zip": dial tcp 142.250.105.141:443: i/o timeout
482.1 utils/chrome.go:8:2: github.com/chromedp/[email protected]: Get "https://proxy.golang.org/github.com/chromedp/cdproto/@v/v0.0.0-20240214232516-ad4608604e9e.zip": dial tcp 173.194.219.141:443: i/o timeout
482.1 utils/chrome.go:9:2: github.com/chromedp/[email protected]: Get "https://proxy.golang.org/github.com/chromedp/cdproto/@v/v0.0.0-20240214232516-ad4608604e9e.zip": dial tcp 173.194.219.141:443: i/o timeout
482.1 utils/chrome.go:10:2: github.com/chromedp/[email protected]: Get "https://proxy.golang.org/github.com/chromedp/chromedp/@v/v0.9.5.zip": dial tcp 108.177.122.141:443: i/o timeout
482.1 workerflow/workerflow.go:10:2: github.com/google/[email protected]: Get "https://proxy.golang.org/github.com/google/uuid/@v/v1.6.0.zip": dial tcp 142.250.105.141:443: i/o timeout
482.1 utils/global.go:4:2: github.com/robfig/cron/[email protected]: Get "https://proxy.golang.org/github.com/robfig/cron/v3/@v/v3.0.1.zip": dial tcp 108.177.122.141:443: i/o timeout
482.1 utils/utils.go:14:2: github.com/tidwall/[email protected]: Get "https://proxy.golang.org/github.com/tidwall/gjson/@v/v1.17.1.zip": dial tcp 142.250.105.141:443: i/o timeout
482.1 utils/chrome.go:11:2: go.uber.org/[email protected]: Get "https://proxy.golang.org/go.uber.org/zap/@v/v1.24.0.zip": dial tcp 108.177.122.141:443: i/o timeout
482.1 utils/init.go:10:2: go.uber.org/[email protected]: Get "https://proxy.golang.org/go.uber.org/zap/@v/v1.24.0.zip": dial tcp 108.177.122.141:443: i/o timeout
482.1 utils/init.go:11:2: gopkg.in/natefinch/[email protected]: Get "https://p

有道云笔记签到 headers问题

楼主,好:
1、有道云笔记我之前使用Python 抓包过,MAC IOS/IPADOS 安卓 WIn
以上几个环境是独立分离的,就是说可以每天多次签到,想了解下楼主的怎么实现的

2、我抓包后发现,headers 加 ”Content-Type" 和不加,是完全不同的两个需求,同理,一天可以签到8次+

	headers = {
	"Cookie": "YNOTE_LOGIN=true; YNOTE_SESS=v2|WRiDHDSBL0qFnMOA6LPB0TzhfP4RHeZ0UERMwzOLTZ0lEn4p4OLey0eZOfOEkMT4RQyPLPu6LPFReLnLkYhLeK0qFn4xxxxxxx",
	"Content-Type": "application/x-www-form-urlencoded",
	}

3、自6月有道云限制登陆设备为2台后,被踢下的设备 cookie 会失效,重新登录会改变,每天最多签到4个

想了解下博主的实现方式是什么,我有几个 微博定期获取视频的程序不知能否 一同添加进来

能否将cookie模块的排期提前?

对于cookie的获取,automa自带的cookie模块支持的话,很多脚本就可以通过自动登录后自动获取cookie,通过HTTP请求模块就可以推送到各个使用的项目中,这样这个项目的使用范围就会大大增加。
还是感谢作者能把这个项目开发下去,对于不会代码的小白来说,这个插件和项目真的很方便。😀

telegram通知报错

青龙部署的方式,qinglong 2.17.1 ,脚本成功运行完成后,发送telegram通知失败。(其他脚本如jdpro等能正常发送tg通知)

2024-02-28T15:13:20.924+0800 INFO 当前版本: 0.2.4
2024-02-28T15:13:20.924+0800 INFO 任务: youdao[false], 用户: doduo, 开始执行
2024-02-28T15:13:28.572+0800 INFO 当前登录状态为: {"login": true}
2024-02-28T15:13:31.751+0800 INFO doduo, 今天已经签到过了 {"callid": "f9bc3123-d5eb-45da-8eae-d2206d3eab5d"}
2024-02-28T15:13:31.756+0800 INFO cookie更新成功, youdao, doduo
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x99d6b7]

goroutine 1 [running]:
github.com/nikoksr/notify/service/telegram.(*Telegram).AddReceivers(...)
/Users/srcrs/Myself/go/pkg/mod/github.com/nikoksr/[email protected]/service/telegram/telegram.go:52
MagicTask/utils.HandlerSend({0xc000140870?, 0x53?}, {0xc0003ec220, 0x1e}, {0xc000040300, 0x22})
/Users/srcrs/Myself/MagicTask/utils/notify.go:34 +0x177
MagicTask/utils.HandlerFilterLoggerSend({0xc000140870, 0x41}, {0xc00013e900, 0x24}, {0xc0003ec220, 0x1e})
/Users/srcrs/Myself/MagicTask/utils/notify.go:160 +0x8a9
MagicTask/utils.Worker.func1()
/Users/srcrs/Myself/MagicTask/utils/utils.go:403 +0xdde
MagicTask/utils.Worker({0xae4fe9, 0x6}, {0xc0001194c6, 0x6})
/Users/srcrs/Myself/MagicTask/utils/utils.go:408 +0x1d9
MagicTask/tasks/youdao.(*Youdao).Run(0xae4fe9?, {0xc000234210?, 0xae4fe9?, 0x6?})
/Users/srcrs/Myself/MagicTask/tasks/youdao/run.go:40 +0x165
main.main()
/Users/srcrs/Myself/MagicTask/main.go:55 +0x4b3

执行结束... 耗时 41 秒  

克隆拉取提示错误

Cloning into 'MagicBox'...
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

MagicBox-0.2.4,Docker-24.0.4,CentOS-7.9-64位 获取二维码失败

[root@10-60-249-207 MagicBox-0.2.4]# pwd
/root/myDeployProject/MagicBox-0.2.4
[root@10-60-249-207 MagicBox-0.2.4]# ll
total 12
drwxr-xr-x 2 root root 26 Dec 7 21:14 configs
-rw-r--r-- 1 root root 234 Nov 23 00:57 docker-compose.yml
-rw-r--r-- 1 root root 839 Nov 23 00:57 install.sh
-rw-r--r-- 1 root root 1066 Nov 23 00:57 LICENSE
-rw-r--r-- 1 root root 0 Nov 23 00:57 MagicBox.log
[root@10-60-249-207 MagicBox-0.2.4]# docker compose run server bilibili login
2023-12-07T21:19:40.259+0800 INFO 当前版本: 0.2.0
2023-12-07T21:21:20.262+0800 ERROR 获取二维码失败 {"error": "context deadline exceeded"}
2023-12-07T21:21:20.262+0800 ERROR 获取二维码失败 {"error": "context deadline exceeded"}
[root@10-60-249-207 MagicBox-0.2.4]#
[root@10-60-249-207 MagicBox-0.2.4]#
[root@10-60-249-207 MagicBox-0.2.4]#
[root@10-60-249-207 MagicBox-0.2.4]# docker --version
Docker version 24.0.4, build 3713ee1
Docker部署获取二维码失败

保价报错

2023-11-30T00:21:59.097+0800 INFO 当前版本: 0.2.4
2023-11-30T00:21:59.097+0800 INFO 任务: jd[false], 用户: doduo, 开始执行
2023-11-30T00:22:04.970+0800 INFO 当前登录状态为: {"login": true}
2023-11-30T00:22:24.971+0800 ERROR 获取申请价保列表失败 {"error": "context deadline exceeded", "callid": "xxx"}
2023-11-30T00:22:24.972+0800 INFO cookie更新成功, jd, doduo
2023-11-30T00:22:25.010+0800 INFO 任务: jd[true], 用户: doduo, 开始执行
2023-11-30T00:22:32.267+0800 INFO 当前登录状态为: {"login": false}
2023-11-30T00:22:32.267+0800 ERROR 登录失败,请检查cookie {"callid": "xxx"}

希望能继续完善支持的组件

今天在吾爱看到这个项目,如果配合automa能够实现无头浏览器的功能,那这个就非常好用了。
也希望能继续完善其他没有支持的组件。 我写的automa脚本很多都会用到JavaScript模块。
感谢开发这个项目,我会持续关注的😀

搭建失败

=> ERROR [server builder 4/4] RUN go build -ldflags "-s -w" -o ./bin/MagicBox . 0.8s

[server builder 4/4] RUN go build -ldflags "-s -w" -o ./bin/MagicBox .:
0.381 go: downloading github.com/tidwall/gjson v1.17.1
0.388 go: downloading github.com/DataHenHQ/useragent v0.1.0
0.388 go: downloading github.com/chromedp/cdproto v0.0.0-20240214232516-ad4608604e9e
0.389 go: downloading github.com/chromedp/chromedp v0.9.5
0.390 go: downloading github.com/robfig/cron/v3 v3.0.1
0.390 go: downloading go.uber.org/zap v1.24.0
0.391 go: downloading gopkg.in/natefinch/lumberjack.v2 v2.2.1
0.422 go: downloading github.com/google/uuid v1.6.0
0.735 utils/proxy.go:6:2: github.com/DataHenHQ/[email protected]: Get "https://proxy.golang.org/github.com/%21data%21hen%21h%21q/useragent/@v/v0.1.0.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/chrome.go:8:2: github.com/chromedp/[email protected]: Get "https://proxy.golang.org/github.com/chromedp/cdproto/@v/v0.0.0-20240214232516-ad4608604e9e.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/chrome.go:9:2: github.com/chromedp/[email protected]: Get "https://proxy.golang.org/github.com/chromedp/cdproto/@v/v0.0.0-20240214232516-ad4608604e9e.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/chrome.go:10:2: github.com/chromedp/[email protected]: Get "https://proxy.golang.org/github.com/chromedp/chromedp/@v/v0.9.5.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 workerflow/workerflow.go:10:2: github.com/google/[email protected]: Get "https://proxy.golang.org/github.com/google/uuid/@v/v1.6.0.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/global.go:4:2: github.com/robfig/cron/[email protected]: Get "https://proxy.golang.org/github.com/robfig/cron/v3/@v/v3.0.1.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/utils.go:14:2: github.com/tidwall/[email protected]: Get "https://proxy.golang.org/github.com/tidwall/gjson/@v/v1.17.1.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/chrome.go:11:2: go.uber.org/[email protected]: Get "https://proxy.golang.org/go.uber.org/zap/@v/v1.24.0.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/init.go:10:2: go.uber.org/[email protected]: Get "https://proxy.golang.org/go.uber.org/zap/@v/v1.24.0.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument
0.735 utils/init.go:11:2: gopkg.in/natefinch/[email protected]: Get "https://proxy.golang.org/gopkg.in/natefinch/lumberjack.v2/@v/v2.2.1.zip": dial tcp: lookup proxy.golang.org on [fe80::1%enp1s0]:53: dial udp [fe80::1%enp1s0]:53: connect: invalid argument


failed to solve: process "/bin/sh -c go build -ldflags "-s -w" -o ./bin/MagicBox ." did not complete successfully: exit code: 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.