sjkhsl / study_xxqg

GNU Affero General Public License v3.0
437 stars 210 forks source link

克隆自原作者johlanse的项目

学习强国自动化学习

该项目基于playwright-go 开发,支持windowslinux,mac

文档地址: https://johlanse.shhy.xyz

请先看文档再提出问题

申明,该项目仅用于学习。

鸣谢

windows使用教程

自定义浏览器位置

windows默认调用系统的edge浏览器,调用目录C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe

若不存在该浏览器会自动尝试下载浏览器到目录下的tools文件夹下,当然也可以自定义配置浏览器位置

修改配置文件的edge_path选项即可配置,配置为配置可执行文件的路径

自定义浏览器支持chromium内核的系列浏览器,但是版本不能太高

例如,我的chrome.exe文件在D盘的browser文件夹下,配置为D:/browser/chrome.exe或者D:\browser\chrome.exe

可执行文件运行

一键安装脚本 废弃

wget  https://raw.githubusercontent.com/johlanse/study_xxqg/main/docs/study_xxqg_install.py && python3 study_xxqg_install.py  废弃

docker运行

docker run --name study_xxqg -d -p 8080:8080 -v /etc/study_xxqg/:/opt/config/  sjkhsl/study_xxqg:latest

各个参数的含义:

docker-compose运行

wget https://raw.githubusercontent.com/sjkhsl/study_xxqg/main/docker-compose.yml
docker-compose up -d

二种运行方式的区别

源码运行

安装golang环境

运行项目

推送配置

一共有以下五种推送方式

其中pushPlus和钉钉推送相互冲突,因为两种推送模式都只能单方面配合定时运行功能使用,只能接收消息,不能发送消息;

在公众号测试号和tg推送以及定时三种只要配置了任意一种,程序将自动卡住等待用户指令。

若您想打开程序就运行,请关闭这三项配置;当前程序默认开启cron定时,所以新版若不想程序一直等待则关闭cron即可。

微信公众号和网页需要公网ip,若没有建议更换其他推送方式,或者自行配置内网穿透,tg推送需要配置代理或者自己反代tg的api,钉钉和pushPlus仅支持单向推送,一般配合定时使用

定时配置

定时任务和一下所有推送均可配合一起使用,cron的语法遵循linux标准cron语法,详情可百度自行查询

因为一些不知名的bug,观看视频时可能卡住不加分,所以建议一天运行三次左右定时,同时多次定时之间间隔不要太短

为防止定时任务每天在同一时间触发,可以配置cron_random_wait,等待随机时间再运行任务

除此之外,还支持以下语法

微信公众号推送

配置config.yml的如下部分

# 微信公众号测试号配置
wechat:
  # 是否启用
  enable: false
  # 开发者平台设置的token
  token: ""
  # 开发者平台的secret
  secret: ""
  # 开发者平台的appId
  app_id: ""
  # 发送登录消息需要使用的消息模板
  # 模板标题,随意  模板内容:  点我登录,然后在浏览器中打开!!
  login_temp_id: ""
  # 发送普通消息需要使用的消息模板
  # 模板标题:随意 模板内容: {{data.DATA}}
  normal_temp_id: ""
  # xxqg会每隔两小时左右检查所有用户的ck有效性,若开启该选项,会在检查失败时推送提醒消息
  push_login_warn: false
  # 微信管理员的openid,可点击关于按钮获得,配置后请重启程序
  super_open_id: ""

web推送

适用于部署在服务器上或者家里有公网IP的设备上

配置config.yml的如下部分

web:
  # 启用web
  enable: true
  # 监听的ip,若只需要本机访问则设置为127.0.0.1,监听本机所有ip为0.0.0.0
  host: 0.0.0.0
  # 监听的端口号 0-65535可选
  port: 8081
  # web端登录管理员的账号
  account:admin
  # web端登录管理员的密码
  password: admin
  # web端登录普通用户的账号密码,支持多个用户,普通用户只能看到自己的信息
  common_user:
    # 代表账号为user,密码为123的普通用户,可添加多个,继续在下面写就好了
    user: 123

    # user1: 123
    # user2: 123

登录的账号密码是在配置文件中配置,不是学习强国的登录账号,管理员登录支持删除用户,同时能看到所有人的用户信息,普通用户就是common_user下面配置的用户,支持多个用户,键是账号,值是密码

钉钉推送

配置config.yml的如下部分,具体使用教程详情参考钉钉

ding:
    enable: true
    access_token: ""
    secret: ""

pushplus推送

配置config.yml的如下部分,具体使用教程参考pushplus

  push_plus:
    enable: true
    token: ""

telegram推送

Telegram Bot

配置 config.yml的如下部分

tg:
  enable: false
  chat_id: 0
  token: ""
  # telegram的代理,不配置默认走系统代理
  proxy: ""
  # 自定义tg的api,可通过cloudflare搭建,需自备域名
  custom_api: "https://api.telegram.org"
  # 白名单id,包括群id或者用户id,若为空,则允许所有群所有用户使用,若仅用于单人,直接配置上面的chat_id就可以
  white_list:
    - 123

配置

  1. 在 Tg 中搜索@BotFather ,发送指令/newbot创建一个 bot
  2. 获取你创建好的 API Token 格式为123456789:AAaaaa-Uuuuuuuuuuu ,要完整复制全部内容
  3. 在 Tg 中搜索@userinfobot ,点击START,它就会给你发送你的信息,记住 Id 即可,是一串数字。
  4. 跟你创建的 bot 会话,点击START,或者发送/start
  5. 将第 2 步获取的 token 放在tokenn中,第 3 步获取的 Id 放到chat_id中,enable设置为 true。
  6. 因为众所周知的原因,telegram推送需要进行配置代理,例如clash的代理配置为http://127.0.0.1:7890即可,若通过cf反代的api,,则填写到custom_api配置项
  7. 若不配置代理的情况下会默认走系统代理,white_list建议填写自己的chat_id,为可以使用机器人的白名单,若需要在群组中使用,请相应进行配置

增加 telegram bot 指令支持

/login 添加一个用户

/get_users 获取所有cookie有效的用户

/study 张三 指定账号学习,若只存在一个用户则自动选择学习

/get_scores 获取账户积分

/quit 退出正在学习的实例,当长时间无响应时建议退出并查看日志然后提交issue

/study_all 按顺序对cookie有效的所有用户进行学习

PushDeer推送配置

pishDeer也仅支持单向推送

配置:

push_deer:
  enable: true
  api: "https://api2.pushdeer.com"
  token: ""

自行注册pushDeer后获取token,配置token到配置文件即可,api默认为官方api,若为自建,则配置对应接口即可

配置文件

配置文件修改后需要重启程序才能生效

# 刷课模式,默认为3,
# 1:只刷文章何视频
# 2:只刷文章和视频和每日答题
# 3:刷文章和视频和每日答题每周答题和专项答题
model: 3

# 日志等级
# panic
# fatal
# error
# warn, warning
# info
# debug
# trace
log_level: "info"

# 是否显示浏览器
show_browser: false

# 跳转学习强国的scheme,默认使用本仓库的action自建scheme,若需自行修改,可直接复制仓库下/docs/scheme.html到任意静态文件服务器
scheme: "https://johlanse.github.io/study_xxqg/scheme.html?"

push:
  ding:
    enable: false
    access_token: ""
    secret: ""
  # 目前仅支持push-plus推送二维码,默认建议使用push-plus推送
  # push-plus使用方法见:http://www.pushplus.plus/
  push_plus:
    enable: false
    token: ""

# telegram交互模式配置
tg:
  enable: false
  chat_id: 0
  token: ""
  # telegram的代理,不配置默认走系统代理
  proxy: ""
  # 自定义tg的api,可通过cloudflare搭建,需自备域名
  custom_api: "https://api.telegram.org"
  # 白名单id,包括群id或者用户id,若为空,则允许所有群所有用户使用,若仅用于单人,直接配置上面的chat_id就可以
  white_list:
    - 123
# 网页端配置
web:
  # 是否启用网页
  enable: true
  #
  host: 0.0.0.0
  port: 8080
  # 网页端登录账号
  account: admin
  # 网页端登录密码
  password: admin

# 微信公众号测试号配置
wechat:
  # 是否启用
  enable: false
  # 开发者平台设置的token
  token: ""
  # 开发者平台的secret
  secret: ""
  # 开发者平台的appId
  app_id: ""
  # 发送登录消息需要使用的消息模板
  # 模板标题,随意  模板内容:  点我登录,然后在浏览器中打开!!
  login_temp_id: ""
  # 发送普通消息需要使用的消息模板
  # 模板标题:随意 模板内容: {{data.DATA}}
  normal_temp_id: ""
  # xxqg会每隔两小时左右检查所有用户的ck有效性,若开启该选项,会在检查失败时推送提醒消息
  push_login_warn: false
  # 微信管理员的openid,可点击关于按钮获得,配置后请重启程序
  super_open_id: ""

# pushDeer推送配置,详情参考psuhDeer官网:http://www.pushdeer.com/official.html
push_deer:
  enable: false
  api: "https://api2.pushdeer.com"
  token: ""

# 登录重试配置
retry:
  # 重试次数
  times: 0

  # 重试之间的时间间隔,单位为分钟
  intervals: 5

# 设置是否定时执行学习程序,格式为cron格式
# "9 19 * * *" 每天19点9分执行一次
# "* 10 * * *” 每天早上十点执行一次
cron: "0 0 * * *"

# 定时任务随机等待时间,单位:分钟
cron_random_wait: 0

#windows环境自定义浏览器路径,仅支持chromium系列
edge_path: ""

# 是否推送二维码
qr_code: false

# 启动时等待时间,为了防止代理启动比软件慢而报错,默认不等待,单位秒
start_wait: 0

# 专项答题可接受的最小分值,因一天重复运行的时候,若专项答题未能答满会继续答新的一套题,会浪费题
special_min_score: 10

# 题目搜索的顺序,为true则从2018年最开始搜题,否则从现在最新开始搜题
reverse_order: false

跳板搭建

因为学习强国官方app的scheme是dtxuexi://,但是大部分浏览器并不能识别该scheme,所以可以通过自行搭建跳板进行跳转。

study_xxqg官方搭建的跳板是使用github page进行搭建的,可能访问情况会比较慢,所以可以进自行搭建跳板。

搭建方法

也可以通过其他静态文件服务器搭建,如 nginx等

常见问题

首先将日志项中的日志等级调整为debug

复现出现的错误,在issue中查找错误日志的关键字

通过搜索引擎查找问题

在群聊中查找聊天记录,查找置顶信息

若无解决方案,可附上关键日志和相关配置文件,在群聊中提出问题或者在github提出issue

目前暂不知道能够续期的次数

如果你想让访问间隔时间更短或者更长,可以通过添加环境变量 CHECK_ENV 为cron值

+ ### windows下出现找不到浏览器的问题

```yaml

自行安装chromium内核的浏览器,包括chrome,edge浏览器之类,然后在配置文件中配置 edge_path 配置项,配置时将路径中的 \ 换成 / 或者 \\ 
+ ### linux上退出后台正在执行的进程

```yaml
study_xxqg进程会在运行的时候将pid输出到目录下的pid.pid文件,使用kil -9 命令即可退出后台进程
```shell
sudo ./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/playwright.sh install-deps

若运行后显示未找到apt-get,可百度对应系统安装apt-get的方法

当开启了cron定时配置,微信公众号测试号配置,telegram配置这三项的任意一项后,

程序就会等待用户的指令从而卡住,所以只需要修改配置文件就可以解决

study_xxqg作为一个开源程序,欢迎大家尽自己的一份力做出贡献

贡献要求

贡献文档

文档采用docsify框架加上github page进行自动部署,

你只需要在docs目录进行marikdown编写,提交pr后会

自动生成,本地可通过docsify进行查看运行结果

贡献代码

技术需求

项目采用go语言编写
web框架采用gin框架
爬虫框架采用req库
浏览器自动化框架采用playwright-go库

目录结构

运行时生成的目录