Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xu22web/tech-study-node
基于Node.js的自动化学习强国工具 40分/天 A tools helps you with xuexiqiangguo based on Node.js.
https://github.com/xu22web/tech-study-node
chrome headless-chrome nodejs puppeteer puppeteer-core qiangguo typescript vitest xuexi xuexiqiangguo
Last synced: about 2 months ago
JSON representation
基于Node.js的自动化学习强国工具 40分/天 A tools helps you with xuexiqiangguo based on Node.js.
- Host: GitHub
- URL: https://github.com/xu22web/tech-study-node
- Owner: Xu22Web
- License: mit
- Created: 2022-08-29T15:48:28.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-11-30T17:10:20.000Z (about 1 year ago)
- Last Synced: 2024-10-15T01:22:54.471Z (2 months ago)
- Topics: chrome, headless-chrome, nodejs, puppeteer, puppeteer-core, qiangguo, typescript, vitest, xuexi, xuexiqiangguo
- Language: JavaScript
- Homepage:
- Size: 3.08 MB
- Stars: 75
- Watchers: 3
- Forks: 18
- Open Issues: 20
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# tech-study-node
### 描述 Description
- 基于 `Node.js` 的自动化学习强国工具
- 依赖 `puppeteer` / `puppeteer-core` 实现浏览器控制
- 依赖 `node-schedule` 实现定时任务
- 依赖 `vitest` 完成基础功能的单元测试
- 通过学习强国`PC 网页版`完成学习任务
- 如果感觉配置麻烦,去看看 [油猴插件脚本版](https://github.com/Xu22Web/tech-study-js '油猴插件脚本版') `https://github.com/Xu22Web/tech-study-js`
### 优点 Advantages
- 学习强国 `PC 网页版` 学习任务的完美解决方案
- 基于 `puppeteer` / `puppeteer-core` 的 API 操作浏览器,实现登录二维码捕获、DOM 元素操作以及处理滑动验证的功能
- 基于 `PushPlus` 推送功能,通过微信远程接收学习情况和服务运行情况
- 基于 `node-schedule` 设置定时任务,每天自动运行定时任务
### 安装与运行 Install and Run
1. 安装依赖
```
pnpm install
```2. ( `Windows` 跳过)在 `Linux` 上安装 Puppeteer 依赖([官方 GitHub 说明](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix 'Linux 的 Puppeteer 依赖'))
> 确保安装了所有必要的依赖项。你可以在 Linux 上运行 `ldd chrome | grep not` 来检查缺少哪些依赖项。下面提供常见必要的依赖项:
Debian (e.g. Ubuntu) Dependencies
```
apt install \
gconf-service \
libasound2 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxss1 \
libxtst6 \
ca-certificates \
fonts-liberation \
libappindicator1 \
libnss3 \
lsb-release \
xdg-utils \
wget
```CentOS Dependencies
```bash
yum install -y \
alsa-lib.x86_64 \
atk.x86_64 \
cups-libs.x86_64 \
gtk3.x86_64 \
ipa-gothic-fonts \
libXcomposite.x86_64 \
libXcursor.x86_64 \
libXdamage.x86_64 \
libXext.x86_64 \
libXi.x86_64 \
libXrandr.x86_64 \
libXScrnSaver.x86_64 \
libXtst.x86_64 \
pango.x86_64 \
xorg-x11-fonts-100dpi \
xorg-x11-fonts-75dpi \
xorg-x11-fonts-cyrillic \
xorg-x11-fonts-misc \
xorg-x11-fonts-Type1 \
xorg-x11-utils
```3. 安装 `Google Chrome` 浏览器(注意:`Chromium` 无法使用,`视听学习` 的网页会打开错误),并配置 `executablePath`
CentOS
- 配置 yum 源
- 在目录 `/etc/yum.repos.d/` 下新建文件 `google-chrome.repo`
```bash
cd /etc/yum.repos.d/
vim /ect/yum.repos.d/google-chrome.repo
```- 编辑文件 `google-chrome.repo` ,保存并退出
```
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
```- 安装 `Google Chrome` 浏览器
- Google 官方源安装:
```bash
yum -y install google-chrome-stable
```- Google 官方源可能在中国无法使用,需添加参数:
```bash
yum -y install google-chrome-stable --nogpgcheck
```- 测试运行 `Google Chrome` 浏览器
```bash
google-chrome
# 或
google-chrome-stable
```- 在 Puppeteer 配置中,将 `executablePath` 字段值改为 `google-chrome` 或 `google-chrome-stable`
Windows
- 下载安装 `Google Chrome` 浏览器
- 官网安装:[Google Chrome 网络浏览器](https://www.google.cn/intl/zh-CN/chrome 'Google Chrome 网络浏览器')
- 准备可执行文件 `Google Chrome` 浏览器
- 在项目根目录,新建文件夹 `.local_chromium`
```
md .local_chromium
```- `Google Chrome` 安装根目录 `C:/Program Files/Google/Chrome/Application` (不一定是这个路径,根据自身情况而定),安装根目录里的 `chrome.exe` 等文件(不含文件夹)、 文件夹 `1xx.0.xxx.xxx` 里的 `1xx.0.xxx.xxx.manifest` 等文件(不含文件夹)以及 `1xx.0.xxx.xxx`里的`Locales` 文件夹(即标记 `✔` 的文件及文件夹),复制到 `.local_chromium`
```
Application
│ chrome.exe ✔
│ chrome.VisualElementsManifest.xml ✔
│ chrome_proxy.exe ✔
│ master_preferences ✔
│
└─1xx.0.xxx.xxx
│ 1xx.0.xxx.xxx.manifest ✔
│ 1xx.0.xxx.xxx.manifest ✔
│ chrome.dll ✔
│ ... ... ✔
│
└─Locales ✔
```- 在 Puppeteer 配置中,将 `executablePath` 字段值改为 `.local_chromium/chrome.exe`
4. 完善基础配置
1. 查看更改 `Puppeteer 配置`(`src/config/pup.ts`),需要注意的配置项
- `headless` 无头模式,即是否非图形界面显示
- `executablePath` 可执行文件路径,由于项目采用 `Google Chrome` + `puppeteer-core` 的形式,需要手动下载浏览器并配置此项
2. 查看更改 `Schedule 配置`(`src/config/schedule.ts`),单或多个定时任务配置
```js
[
{
// 若 `Push 配置`中 `enabled` 为 true,任务配置的用户 `token` 为必填项
/**
* @description 用户昵称
*/
nick: '用户昵称',
/**
* @description 自己或者好友 token (-)
*/
token: '用户 token',
/**
* @description cron 表达式
* @example '0 0 12 * * ?' 表示12点, ['0 0 12 * * ?', '0 0 13 * * ?'] 表示十二点和十三点
*/
cron: '0 0 12 * * ?',
/**
* @description 学习项目配置
* @example [文章选读, 视听学习, 每日答题]
*/
taskConfig: [true, true, true],
/**
* @description 专项练习 答题失败(由于答完结算,仅包含答题异常或无答案)退出不提交
* @example true 退出答题不提交 false 继续答题
*/
paperExitAfterWrong: false,
},
];
``````
# 关于`node-schedule`定时任务的`cron`表达式* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ 星期 (0 - 7) (0 或 7 是星期天)
│ │ │ │ └───── 月 (1 - 12)
│ │ │ └────────── 日 (1 - 31)
│ │ └─────────────── 时 (0 - 23)
│ └──────────────────── 分 (0 - 59)
└───────────────────────── 秒 (0 - 59,可选)
```3. 查看更改 `Study 配置`(`src/config/study.ts`),需要注意的配置项
- `qrcodeLocalEnabled` 登录二维码本地保存,便于在无头模式登录(开启推送后,自行关闭)
4. 启用 `PushPlus` 推送步骤(不需要推送请跳过)
- 在 [PushPlus 官网](https://www.pushplus.plus/ 'PushPlus 官网') 上,注册登录账号。若有其他用户,可添加其他用户为好友。([PushPlus 好友消息](https://www.pushplus.plus/liaison.html 'PushPlus 好友消息'),官方默认采用 `微信公众号` 推送)
- 更改 `Push 配置`(`src/config/push.ts`),设置`enabled`为`true`,添加管理员`token`(`管理员`能接收到服务推送以及错误推送,`用户`只能接受到自己的学习通知)
```js
{
/**
* @description 启用推送
* @example true 启用推送 false 禁用推送
*/
enabled: true,
/**
* @description 发送服务消息昵称
*/
nick: '管理员',
/**
* @description 发送服务消息来源
*/
from: 'tech-study-node',
/**
* @description 管理员的 token
*/
token: '管理员 token',
}```
![管理员token](./images/administrator.png)
- 更改 `Schedule 配置`(`src/config/schedule.ts`),添加用户`token`
```js
[
{
/**
* @description 管理员或者好友 token
*/
token: '用户 token',
},
];
```![管理员token](./images/administrator.png)
![好友消息token](./images/user.png)
5. 运行
```
pnpm start
```6. 定时任务开启时,`学习强国 APP` 扫码登录
- 未开启 `PushPlus` 推送
> 注意:`Puppeteer 配置`(`src/config/pup.ts`)中的 headless 字段(new 非图形界面,false 图形界面)
- 对于图形界面,可直接扫码登陆
- 对于非图形界面,扫描 src/qrcode 目录下的二维码
- 开启 `PushPlus` 推送,保存微信公众发送消息里的二维码,扫码登录
### 配置 Configuration
- Puppeteer 配置 `src/config/pup.ts` ([官方文档配置](https://pptr.dev/api/puppeteer.launchoptions 'Puppeteer 使用和配置'))
- Study 配置 `src/config/study.ts` (学习配置)
- PushPlus 配置 `src/config/push.ts` (推送配置)
- API 配置 `src/config/api.ts` (接口配置)
- URL 配置 `src/config/url.ts` (链接配置)
- Schedule 配置 `src/config/schedule.ts` (定时任务配置)
### 附加 Addition
- 在 `test` 文件夹下,依赖 `vitest` 完成基础功能的单元测试
- `login` 用户登录
- `watch` 文章选读,视听学习
- `exam` 每日答题,专项练习
- `error` 错误测试
- `api` 测试 API 可用性
- `log` 测试日志生成保存和自动删除
- `extension` 浏览器插件测试