开篇

忘记了是哪一年的哪一天,人总有那么几天是心里很痒痒的,本来我只是打算翻出来色色的学习的,结果无意之间看到一些非常有趣的东西,不得不说 GitHub 真是个好东西啊

青龙面板

正题就是青龙面板[1]。青龙是 whyour 大佬写的一个定时任务管理平台,支持 Python3、JavaScript、Shell、Typescript,简单来说就是可以定时运行一些脚本,就比如说薅羊毛、签到、抢购等等,谁会跟羊毛过意不去呢?

青龙面板涵盖以下功能

  • 支持多种脚本语言(python3、JavaScript、shell、typescript)

  • 支持在线管理脚本、环境变量、配置文件

  • 支持在线查看任务日志

  • 支持秒级任务设置

  • 支持系统级通知

  • 支持暗黑模式

  • 支持手机端操作

搭建部署

推荐使用Docker进行部署,NAS或者面板(如宝塔、1Panel等)可以直接在镜像仓库搜索进行部署,如果是云服务器等先下载安装docker,再进行青龙的部署,从大佬的README中可以看到相关部署的教程,我这里搬运下

latest 镜像是基于 alpine 构建,debian 镜像是基于 debian-slim 构建。如果需要使用 alpine 不支持的依赖,建议使用 debian 镜像,下面是拉取镜像命令

1
2
docker pull whyour/qinglong:latest
docker pull whyour/qinglong:debian

下面进行部署青龙

docker (推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
# curl -sSL get.docker.com | sh
docker run -dit \
-v $PWD/ql/data:/ql/data \
# 冒号后面的 5700 为默认端口,如果设置了 QlPort, 需要跟 QlPort 保持一致
-p 5700:5700 \
# 部署路径非必须,比如 /test
-e QlBaseUrl="/" \
# 部署端口非必须,当使用 host 模式时,可以设置服务启动后的端口,默认 5700
-e QlPort="5700" \
--name qinglong \
--hostname qinglong \
--restart unless-stopped \
whyour/qinglong:latest

docker-compose (推荐)

1
2
3
4
5
6
7
8
#  curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
mkdir qinglong
wget https://raw.githubusercontent.com/whyour/qinglong/master/docker/docker-compose.yml

# 启动
docker-compose up -d
# 停止
docker-compose down

到此就完成了,然后在本地打开青龙面板界面,默认端口为5700,打开你的浏览器,访问 http://127.0.0.1:5700可进入安装向导,设置账户密码,按要求一步一步即可,推送可先不填,如果没有进入配置向导,可在终端执行以下命令查看账号密码

1
docker exec -it qinglong cat /ql/config/auth.json

看到如下界面就完成了

青龙首页

拔毛行动

拉取脚本仓库

在拉取脚本仓库之前需要先了解下拉取命令的格式,青龙有个内置命令:ql ,描述如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 更新并重启青龙
ql update
# 运行自定义脚本extra.sh
ql extra
# 添加单个脚本文件
ql raw <file_url>
# 添加单个仓库的指定脚本
ql repo <repo_url> <whitelist> <blacklist> <dependence> <branch> <extensions>
# 删除旧日志
ql rmlog <days>
# 启动tg-bot
ql bot
# 检测青龙环境并修复
ql check
# 重置登录错误次数
ql resetlet
# 禁用两步登录
ql resettfa
参数说明
file_url脚本地址
repo_url仓库地址
whitelist拉取仓库时的白名单,即就是需要拉取的脚本的路径包含的字符串,多个竖线分割
blacklist拉取仓库时的黑名单,即就是需要拉取的脚本的路径不包含的字符串,多个竖线分割
dependence拉取仓库需要的依赖文件,会直接从仓库拷贝到scripts下的仓库目录,不受黑名单影响,多个竖线分割
extensions拉取仓库的文件后缀,多个竖线分割
branch拉取仓库的分支
days需要保留的日志的天数
file_path任务执行时的文件路径

对上述命令有个初步了解之后,再看拉库命令就明了很多了,首先我们先拉个6dy大佬写的JD签到做任务的库6dylan6/jdpro[2],登陆后选择订阅管理创建订阅,在名称一行输入拉库指令如下:

国内机(带代理):

1
ql repo https://js.jdpro.site/https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"

默认代理拉不了,自行找可用代理

国外机:

1
ql repo https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"

定时任务随意,要遵循crontab表达式规则,可以使用这个在线工具 https://tool.lu/crontab 里面也有详细说明每个字段的意思

创建订阅

创建完成后可在订阅管理中看到刚刚创建的订阅,此时点击右侧运行等待拉库完成即可,后面会根据你设置的定时规则自动拉库,这样就做到自动更新脚本了

运行订阅

点击日志可以查看到拉库状态,我这里是已经拉完了,实际第一次拉库会显示添加XXX任务成功的log

拉库

此时点击左侧定时任务,便可查看到刚刚拉下来的脚本了

定时任务

这里的定时规则可以根据自己的需求改动,右侧也可以手动运行,查看日志看看是否运行错误,顶部更多可以创建视图进行分类,当脚本过多时不会显得太乱

安装依赖

我们只拉库还不行,此时运行可以发现,肯定是会报错的,通常表现为

1
2
3
4
5
6
7
8
9
10
# 缺少依赖
Error: Cannot find module ‘xx’

'xxxx' module not found

# 缺少Python依赖
ModuleNotFoundError: No module named ‘xxx’

# 拉库不完整,缺少相应文件,检查拉库命令重新拉库
Error: Cannot find module ‘./xx’

对于缺少依赖的问题,可以在左侧依赖管理进行安装,通常需要安装的依赖如下所示:

NodeJs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
crypto-js
prettytable
dotenv
jsdom
date-fns
tough-cookie
tslib
ws@7.4.3
ts-md5
jsdom -g
jieba
fs
form-data
json5
global-agent
png-js
@types/node
require
typescript
js-base64
axios
moment

Python3:

1
2
3
4
5
6
requests
canvas
ping3
jieba
PyExecJS
aiohttp

Linux:

1
2
3
bizCode
bizMsg
lxm

安装失败可以在 系统设置 - 依赖设置 里面配置代理或者镜像源

我这里用的是这个

Node 软件包镜像源:

1
https://registry.npmmirror.com

Python 软件包镜像源:

1
https://pypi.tuna.tsinghua.edu.cn/simple

Linux 软件包镜像源:

1
https://mirrors.aliyun.com

当然还是推荐对应的一键安装脚本QLDependency[3]

一键安装单独青龙的依赖
国内版:

1
docker exec -it qinglong bash -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh | bash)"

国外版:

1
docker exec -it qinglong bash -c "$(curl -fsSL https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh | bash)"

【更新】 版本号 2.12+ 的新版本青龙安装失败请尝试:

1
docker exec -it qinglong bash -c "$(curl -fsSL https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/XinQLOneKey.sh | bash)"

其中 -it 后面的 qinglong 是容器的名字,替换成自己的就行,安装完成后重启下镜像即可。

环境变量

此时再去手动运行定时任务的时候,发现就可以运行了,但是又出现了一个问题,提示没有环境变量JD_COOKIE,我们这时候就需要抓取JD_COOKIE添加到环境变量中,具体抓取方法参考这里,添加到环境变量中创建JD_COOKIE变量

也可以写在配置文件中

1
export JD_COOKIE="xxxxxx"

到这一步,这个羊毛基本算是可以薅下来啦!当然,实际运行和添加的一些其他的环境变量还是需要多看看jdpro的README和ISSUES还有一些教程,还有设置配置文件(拉库、任务、推送、环境变量等)、配置代理池(防止黑号)、推送服务等等需要自行摸索下,只要肯折腾都不难~

参考


  1. whyour/qinglong:https://github.com/whyour/qinglong ↩︎

  2. 6dylan6/jdpro:https://github.com/6dylan6/jdpro ↩︎

  3. FlechazoPh/QLDependency:https://github.com/FlechazoPh/QLDependency ↩︎