
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
weread-selenium-cli
Advanced tools
只为便宜一点买微信读书会员。

# 创建工作目录
mkdir -p $HOME/weread-challenge && cd $HOME/weread-challenge
# 下载配置文件
wget https://raw.githubusercontent.com/jqknono/weread-challenge-selenium/main/docker-compose.yml
# 启动服务
docker compose up -d
# 创建定时任务
(crontab -l 2>/dev/null; echo "00 */6 * * * cd $HOME/weread-challenge && docker compose up -d") | crontab -
# 扫描$HOME/weread-challenge/.weread下生成的登录二维码, 开始自动阅读
根据实际操作,还有如下未明确说明的特点:
linux | windows | macosamd64chrome | MicrosoftEdge | firefox | safari| 子命令 | 作用 | 关键参数 |
|---|---|---|
run | 执行微信读书自动阅读主流程 | 沿用现有环境变量 |
schedule | 生成计划任务命令,支持 windows / macos / linux | --name --every --workdir --weread-duration |
help / -h / --help | 显示帮助 | 可跟 run / schedule |
# 查看总帮助
npx weread-selenium-cli -h
# 运行主流程
npx weread-selenium-cli run
# run 参数会覆盖同名环境变量
npx weread-selenium-cli run --weread-browser firefox --weread-duration 30
# 生成 Windows 计划任务创建命令
npx weread-selenium-cli schedule --name weread-hourly --every 60 --platform windows
# 计划任务仅支持附加阅读时长参数
npx weread-selenium-cli schedule --name weread-hourly --every 240 --platform windows --weread-duration 10
schedule 需要在目标平台上运行;例如 Windows 计划任务要在 Windows 上执行该子命令。
schedule 只生成创建/验证/删除命令,不会直接注册系统计划任务。
schedule 仅支持把 --weread-duration 追加到生成出来的 weread-selenium-cli run 命令中,不支持其他 run 参数。
Windows 默认会生成一条 schtasks 创建命令:先按当天某个时间点开始,再按指定间隔重复执行,重复持续时间固定为 8760:00。
schedule 未显式传 --workdir 时,默认使用当前用户 HOME 作为工作目录。
如果 Windows 创建命令执行时报 Access is denied,请改在“以管理员身份运行”的终端里执行生成出来的创建命令。
run 支持把现有环境变量改写成参数形式,优先级为:CLI 参数 > 环境变量 > 默认值。参数既支持 --weread-browser 这种 kebab-case,也支持 --WEREAD_BROWSER 这种原始环境变量名。
weread-selenium-cli 是主命令,旧全局命令 weread-challenge 继续保留,等价于执行 weread-selenium-cli run。
本地运行在未设置 WEREAD_DATA_DIR 时,会优先使用当前工作目录下已存在的 .weread,其次复用旧版 data/,否则新建 .weread。
# 安装 Node.js 和 npm
sudo apt update
sudo apt install nodejs npm
# 创建运行文件夹
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# 安装 npm 包
npm install -g weread-selenium-cli
# 设置环境变量并运行
export WEREAD_BROWSER="chrome"
weread-selenium-cli run
也可不全局安装,直接使用 npx 运行:
npx weread-selenium-cli run
已存在的旧全局命令 weread-challenge 仍可直接运行。
如果你直接运行当前仓库源码,可使用:
# 安装依赖
npm install
# 本地浏览器运行
npm run dev
# 本地浏览器 + DEBUG 日志
npm run debug
# 使用 package.json 内置示例参数运行
# 注意:npm run start 中的 WEREAD_REMOTE_BROWSER 是示例地址,需按实际环境调整
npm run start
services:
app:
image: docker.io/jqknono/weread-challenge:latest
pull_policy: always
environment:
- WEREAD_REMOTE_BROWSER=http://selenium:4444
- WEREAD_DURATION=68
volumes:
- ./.weread:/app/.weread
depends_on:
selenium:
condition: service_healthy
dns:
- 223.5.5.5
selenium:
image: selenium/standalone-chromium:latest
pull_policy: if_not_present
shm_size: 2gb
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- SE_ENABLE_TRACING=false
- SE_BIND_HOST=false
- SE_JAVA_DISABLE_HOSTNAME_VERIFICATION=false
dns:
- 223.5.5.5
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4444/status"]
interval: 5s
timeout: 60s
retries: 10
将以上内容保存为 docker-compose.yml 文件,然后运行:
docker compose up -d
首次启动后,需要微信扫描二维码登录,二维码保存在 ./.weread/login.png
如果你仍在沿用旧版 ./data:/app/data 挂载,且没有显式设置 WEREAD_DATA_DIR,当前版本会继续复用 /app/data;新部署示例统一使用 ./.weread:/app/.weread。
# 创建网络
docker network create weread-challenge-net
# 启动 Selenium 服务
docker run --restart always -d --name selenium-live \
-v /var/run/docker.sock:/var/run/docker.sock \
--shm-size="2g" \
--network weread-challenge-net \
--hostname selenium-live \
--dns 119.29.29.29 \
--dns 223.5.5.5 \
-p 4444:4444 \
-p 7900:7900 \
-e SE_ENABLE_TRACING=false \
-e SE_BIND_HOST=false \
-e SE_JAVA_DISABLE_HOSTNAME_VERIFICATION=false \
-e SE_NODE_MAX_INSTANCES=10 \
-e SE_NODE_MAX_SESSIONS=10 \
-e SE_NODE_OVERRIDE_MAX_SESSIONS=true \
selenium/standalone-chromium:latest
# 运行微信读书挑战
docker run --rm --name user-read \
-v $HOME/weread-challenge/user/.weread:/app/.weread \
-e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 \
-e WEREAD_DURATION=68 \
docker.io/jqknono/weread-challenge:latest
# 添加第二个用户
docker run --rm --name user2-read \
-v $HOME/weread-challenge/user2/.weread:/app/.weread \
-e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 \
-e WEREAD_DURATION=68 \
docker.io/jqknono/weread-challenge:latest
首次启动后,需要微信扫描二维码登录,二维码保存在 ./.weread/login.png
有两种方式添加定时任务:
docker-compose 启动,浏览器环境配置简单,一键启动,每个浏览器实例对应一个用户docker 启动,工具使用远程浏览器特性连接到浏览器实例,浏览器环境可能需要自行调整,支持单浏览器多用户WORKDIR=$HOME/weread-challenge
mkdir -p $WORKDIR
cd $WORKDIR
cat > $WORKDIR/docker-compose.yml <<EOF
services:
app:
image: docker.io/jqknono/weread-challenge:latest
pull_policy: always
environment:
- WEREAD_REMOTE_BROWSER=http://selenium:4444
- WEREAD_DURATION=68
volumes:
- ./.weread:/app/.weread
depends_on:
selenium:
condition: service_healthy
selenium:
image: selenium/standalone-chromium:latest
pull_policy: if_not_present
shm_size: 2gb
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- SE_ENABLE_TRACING=false
- SE_BIND_HOST=false
- SE_JAVA_DISABLE_HOSTNAME_VERIFICATION=false
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4444/wd/hub/status"]
interval: 5s
timeout: 60s
retries: 10
EOF
# 首次启动后, 需微信扫描二维码登录, 二维码保存在 $HOME/weread-challenge/.weread/login.png
# 每隔6个小时, 阅读68分钟
(crontab -l 2>/dev/null; echo "00 */6 * * * cd $WORKDIR && docker compose up -d") | crontab -
# 创建网络
docker network create weread-challenge-net
# 启动浏览器
docker run --restart always -d --name selenium-live \
--network weread-challenge-net \
--hostname selenium-live \
-v /var/run/docker.sock:/var/run/docker.sock \
--shm-size="2g" \
-p 4444:4444 \
-p 7900:7900 \
-e SE_ENABLE_TRACING=false \
-e SE_BIND_HOST=false \
-e SE_JAVA_DISABLE_HOSTNAME_VERIFICATION=false \
-e SE_NODE_MAX_INSTANCES=3 \
-e SE_NODE_MAX_SESSIONS=3 \
-e SE_NODE_OVERRIDE_MAX_SESSIONS=true \
-e SE_SESSION_REQUEST_TIMEOUT=10 \
-e SE_SESSION_RETRY_INTERVAL=3 \
selenium/standalone-chromium:latest
WEREAD_USER="user"
mkdir -p $HOME/weread-challenge/$WEREAD_USER/.weread
# 首次启动后, 需微信扫描二维码登录, 二维码保存在 $HOME/weread-challenge/$WEREAD_USER/.weread/login.png
# 每隔6个小时, 阅读68分钟
(crontab -l 2>/dev/null; echo "00 */6 * * * docker run --rm --name ${WEREAD_USER}-read -v $HOME/weread-challenge/${WEREAD_USER}/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=68 -e WEREAD_USER=${WEREAD_USER} docker.io/jqknono/weread-challenge:latest") | crontab -
crontab 示例:
00 01 * * * docker run --rm --name user1-read -v /home/test/weread-challenge/user1/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=180 -e WEREAD_USER=user1 -e WEREAD_SELECTION=2 -e ENABLE_EMAIL=true -e EMAIL_SMTP=smtp.mail.me.com -e EMAIL_USER=user1@icloud.com -e EMAIL_PASS=aaaa-bbbb-cccc-dddd -e EMAIL_PORT=587 -e EMAIL_TO=weread-challege@outlook.com docker.io/jqknono/weread-challenge:latest
00 01 * * * docker run --rm --name user2-read -v /home/test/weread-challenge/user2/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=180 -e WEREAD_USER=user2 -e WEREAD_SELECTION=2 -e ENABLE_EMAIL=true -e EMAIL_SMTP=smtp.mail.me.com -e EMAIL_USER=user2@icloud.com -e EMAIL_PASS=aaaa-bbbb-cccc-dddd -e EMAIL_PORT=587 -e EMAIL_TO=weread-challege@outlook.com docker.io/jqknono/weread-challenge:latest
00 01 * * * docker run --rm --name user1-read -v /home/test/weread-challenge/user1/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=180 -e WEREAD_USER=user1 -e WEREAD_SELECTION=2 -e BARK_KEY=your-bark-key-here docker.io/jqknono/weread-challenge:latest
# 安装 Node.js
winget install -e --id OpenJS.NodeJS.LTS
# 创建运行文件夹
New-Item -ItemType Directory -Force -Path "$HOME\Documents\weread-challenge"
Set-Location "$HOME\Documents\weread-challenge"
# 安装 npm 包
npm install -g weread-selenium-cli
# 设置环境变量并运行
$env:WEREAD_BROWSER="MicrosoftEdge"
weread-selenium-cli run
Docker 运行方式与 Linux 相同。
# 安装 Node.js
brew install node
# 创建运行文件夹
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# 安装 npm 包
npm install -g weread-selenium-cli
# 启用 Safari 自动化支持
sudo safaridriver --enable
# 设置环境变量并运行
export WEREAD_BROWSER="safari"
weread-selenium-cli run
Docker 运行同 Linux.
Bark 是一个 iOS 设备上的推送服务,可以通过简单的 HTTP 请求向 iPhone 发送通知。本工具支持通过 Bark 推送运行状态和结果。
BARK_KEY 为获取的密钥BARK_SERVER 为自定义 Bark 服务器地址(默认使用官方服务器 https://api.day.app)简化配置:只需设置 BARK_KEY 即可启用 Bark 推送,无需额外启用开关。
export BARK_KEY="your-bark-key-here"
npx weread-selenium-cli run
docker run --rm --name user-read \
-v $HOME/weread-challenge/user/.weread:/app/.weread \
-e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 \
-e WEREAD_DURATION=180 \
-e BARK_KEY="your-bark-key-here" \
docker.io/jqknono/weread-challenge:latest
# Bark推送示例
00 01 * * * docker run --rm --name user1-read -v /home/test/weread-challenge/user1/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=180 -e WEREAD_USER=user1 -e WEREAD_SELECTION=2 -e BARK_KEY=your-bark-key-here docker.io/jqknono/weread-challenge:latest
BARK_KEY 即可启用 Bark 推送,无需额外开关BARK_SERVER 环境变量脚本在检测到新的微信读书登录链接后,会自动推送:
BARK_KEY 即可启用ENABLE_EMAIL=true 且配置完整 SMTP 参数后启用Docker Compose environment 示例:
environment:
- WEREAD_REMOTE_BROWSER=http://selenium:4444
- WEREAD_DURATION=15
- WEREAD_SCREENSHOT=false
- WEREAD_USER=your-user
- WEREAD_SELECTION=-1
- ENABLE_EMAIL=true
- EMAIL_SMTP=smtp.mail.me.com
- EMAIL_USER=your-email@icloud.com
- EMAIL_PASS=your-app-password
- EMAIL_PORT=587
- EMAIL_TO=your-receiver@example.com
- BARK_KEY=your-bark-key
- DEFAULT_BOOK_URL=https://weread.qq.com/web/reader/276323e0813ab90a5g0144d7
说明:
EMAIL_SMTP、EMAIL_USER、EMAIL_PASS、EMAIL_TO# 创建桥接网络
docker network create weread-challenge-net
# 启动浏览器服务
docker run --restart always -d --name selenium-live \
-v /var/run/docker.sock:/var/run/docker.sock \
--shm-size="2g" \
--network weread-challenge-net \
--hostname selenium-live \
-p 4444:4444 \
-p 7900:7900 \
-e SE_ENABLE_TRACING=false \
-e SE_BIND_HOST=false \
-e SE_JAVA_DISABLE_HOSTNAME_VERIFICATION=false \
-e SE_NODE_MAX_INSTANCES=10 \
-e SE_NODE_MAX_SESSIONS=10 \
-e SE_NODE_OVERRIDE_MAX_SESSIONS=true \
selenium/standalone-chromium:latest
# 设置用户名
WEREAD_USER1="user1"
WEREAD_USER2="user2"
# 创建用户数据目录
mkdir -p $HOME/weread-challenge/$WEREAD_USER1/.weread
mkdir -p $HOME/weread-challenge/$WEREAD_USER2/.weread
# 添加定时任务(每隔6个小时,阅读 68 分钟)
# 首次启动后需微信扫描二维码登录,二维码保存在:
# $HOME/weread-challenge/${WEREAD_USER1}/.weread/login.png
# $HOME/weread-challenge/${WEREAD_USER2}/.weread/login.png
(crontab -l 2>/dev/null; echo "00 */6 * * * docker run --rm --name ${WEREAD_USER1}-read -v $HOME/weread-challenge/${WEREAD_USER1}/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=68 -e WEREAD_USER=${WEREAD_USER1} docker.io/jqknono/weread-challenge:latest") | crontab -
(crontab -l 2>/dev/null; echo "00 */6 * * * docker run --rm --name ${WEREAD_USER2}-read -v $HOME/weread-challenge/${WEREAD_USER2}/.weread:/app/.weread --network weread-challenge-net -e WEREAD_REMOTE_BROWSER=http://selenium-live:4444 -e WEREAD_DURATION=68 -e WEREAD_USER=${WEREAD_USER2} docker.io/jqknono/weread-challenge:latest") | crontab -
| 环境变量 | 默认值 | 可选值 | 说明 |
|---|---|---|---|
WEREAD_USER | weread-default | - | 用户标识 |
WEREAD_REMOTE_BROWSER | "" | - | 远程浏览器地址 |
WEREAD_DURATION | 10 | - | 阅读时长 |
WEREAD_SPEED | slow | slow,normal,fast | 阅读速度 |
WEREAD_SCREENSHOT | true | true,false | 阅读期间每分钟截图 |
WEREAD_SELECTION | 2 | -1,0,1,2,3,4 | 选书方式,-1 直接读取 DEFAULT_BOOK_URL,0 随机选择第 1 到 4 本,1-4 表示书架中的第 N 本 |
DEFAULT_BOOK_URL | https://weread.qq.com/web/reader/276323e0813ab90a5g0144d7 | - | 默认阅读链接,WEREAD_SELECTION=-1 或书架中未找到可点击书籍时会直接使用 |
WEREAD_BROWSER | chrome | chrome,MicrosoftEdge,firefox,safari | 浏览器 |
ENABLE_EMAIL | false | true,false | 邮件通知 |
EMAIL_SMTP | "" | - | 邮箱 SMTP 服务器 |
EMAIL_PORT | 465 | 25,465,587 | 邮箱 SMTP 端口 |
EMAIL_USER | "" | - | 邮箱用户名 |
EMAIL_PASS | "" | - | 邮箱密码 |
EMAIL_FROM | "" | - | 发件人 |
EMAIL_TO | "" | - | 收件人 |
BARK_KEY | "" | - | Bark 推送密钥 |
BARK_SERVER | https://api.day.app | - | Bark 服务器地址 |
WEREAD_AGREE_TERMS | true | true,false | 隐私同意条款 |
weread-challenge@techfetch.dev,本项目会立即删除cookies 部分信息,以用于使用者统计和展示用户名称 | 首次使用时间 | 最近使用时间 | 总使用次数 | 浏览器类型 | 操作系统类别 | 阅读时长设置 | 异常退出原因WEREAD_AGREE_TERMS=falsecookies 可用于微信读书网页登录,登录后可以执行书架操作,但本工具不会使用搜集的信息进行登录操作设置 -> 登录设备 中确认登录设备FAQs
Selenium automation tool for WeRead challenge
The npm package weread-selenium-cli receives a total of 5 weekly downloads. As such, weread-selenium-cli popularity was classified as not popular.
We found that weread-selenium-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.