自建一个 PSNine 自动签到服务

Intro

一些老的中文BBS,仍然保留了签到功能,每天打卡可以换取些论坛货币
之前自己都是写脚本,添加定时任务完成的
最近也是发现了binux/qiandao这个基于HAR的签到框架,于是决定搭一个公开实例,方便大家使用

当然binux/qiandao最近已经没有在维护了,推荐基于这个框架修改和完善项目qiandao-today/qiandao
https://github.com/qiandao-today/qiandao

已经搭建完成的站点: https://qd.abyss.moe/

部署

可以使用Docker运行,或Clone源码后使用Python运行
当然使用Docker的话,数据库基于sqlite,这样就不需要额外数据库配置和安装了
所以下文使用Docker安装,比较方便

安装Docker

已经安装了的话,可以跳过

1
2
3
4
5
6
curl -sSL https://get.docker.com | sh

systemctl enable docker --now

## 当然,在大陆并且网络有困难的话,可以使用daocloud.io的国内镜像
## curl -sSL https://get.daocloud.io/docker | sh

创建容器

$(pwd)为当前目录,可以根据自己需求替换

1
docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config a76yyyy/qiandao

这时候访问 http://ip:8923 的话,你应该能正常看到qiandaowebui

点击登录,然后输入自己邮箱和密码,选择注册.可以进入到后台页

我们需要设置一个管理员,回到你的终端,进入容器

1
docker exec -it qiandao /bin/bash

接下来设置管理员 (请把邮箱换成你自己注册的),然后重新登陆下
config.py是配置文件,具体配置可以参考项目的Readme.md
https://github.com/qiandao-today/qiandao/blob/master/README.md

配置结束后,exit退出容器管理

1
2
3
4
bash-5.1# python ./chrole.py ame@abyss.moe admin
role of ame@abyss.moe changed to admin
bash-5.1# exit
exit

使用 Nginx 反向代理

Nginx的话可以直接通过包管理安装
创建一个新的server配置,location反向代理8923端口即可

1
2
3
4
location /
{
proxy_pass http://127.0.0.1:8923;
}

创建模版

创建签到任务前,首先要编写模版
这里以在PSNine签到为例,简单说下如何保存HAR,还有建立模版的过程
需要准备2个帐号,一个现代的浏览器(Chrome, Edge, Firefox etc..)

打开网站,按F12打开控制台,切换到Network选项卡
勾上Preserve Log,以防止页面刷新或跳转后,所有Request被清空
点击Clear按钮,把之前打开的无用的Request清空下

点击签到按钮后,后会多出几个请求log
右键第一个Request,选择Save all as HAR with content保存HAR文件

回到你的签到站,新建模版,上传HAR文件,用户名和密码不需要填写
点击你的请求,接下来我们要做一些修改

把你自己的Cookies删除,Request Headers中的Cookie对应值改成变量{{cookie}},并且打勾
可以把浏览器自带的一些没用的Request Headers清除,改好的如下图

想可以在测试选项卡添加变量,填写自己的cookie后,点击测试
可以观察下的html源码.成功的话,获取的铜币也在html元素里
为方便我们查看日志,我们用正则提取出来,比如这样

1
2
coin        <b style="color:red;">(\d+)<
day <b style="color:green;">(\d+)<

这样签到的天数铜币数量就保存在变量daycoin中了.点击保存一次
接着我们继续插入一个unicode转换, 点击保存

Query String Parameterscontent填写需要转换内容祈祷得到 {{coin}} 铜币,已经累计祈祷 {{day}} 天了

在预览页面,变量提取的name改成__log__,正则保持默认的"转换后": "(.*)"即可

保存后.可以在我的模版里发布成公开模版,然后在我的发布页面里审核通过

签到

新建一个签到任务,填上自己的Cookie即可
如果装了GetCookie浏览器插件,应该可以直接点击获取

如何取得cookie

关于手动获取Cookie的方法,先打开想要获取的网站

F12打开控制台,切换到Console页面,输入document.cookie,去掉前后的'就是你的cookie
[更新] 请注意 这样是无法获取带 HTTP Only 的 Cookie,也就是可能获取不全.所以请使用下面的方法

或者在Network选项卡里面打开任意请求,找到Request Headers,把Cookie内容复制出来