
只为便宜一点买微信读书会员.

根据实际操作, 还有如下未明确说明的特点:
linux | windows | macosamd64 | arm64chrome | MicrosoftEdge | firefox | safari下载链接: weread-challenge.js
# 安装 nodejs sudo apt install nodejs # 老旧版本的 nodejs 需要安装 npm sudo apt install npm # 创建运行文件夹 mkdir -p $HOME/weread-challenge cd $HOME/weread-challenge # 安装依赖 npm install selenium-webdriver # 通过环境变量设置运行参数 WEREAD_BROWSER="chrome" # 运行 node weread-challenge.js 如需邮件通知, 需安装 nodemailer: npm install nodemailer
services: app: image: jqknono/weread-challenge:latest pull_policy: always environment: - WEREAD_REMOTE_BROWSER=http://selenium:4444 - WEREAD_DURATION=68 volumes: - ./data:/app/data depends_on: selenium: condition: service_healthy selenium: image: selenium/standalone-chrome:4.26 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 保存为 docker-compose.yml, 运行 docker compose up -d.
# run selenium standalone docker run --restart always -d --name 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=10 \ -e SE_NODE_MAX_SESSIOnS=10 \ -e SE_NODE_OVERRIDE_MAX_SESSIOnS=true \ selenium/standalone-chrome:4.26 # run weread-challenge docker run --rm --name user-read \ -v $HOME/weread-challenge/user/data:/app/data \ -e WEREAD_REMOTE_BROWSER=http://172.17.0.2:4444 \ -e WEREAD_DURATION=68 \ weread-challenge:beta # add another user docker run --rm --name user2-read \ -v $HOME/weread-challenge/user2/data:/app/data \ -e WEREAD_REMOTE_BROWSER=http://172.17.0.2:4444 \ -e WEREAD_DURATION=68 \ weread-challenge:latest WORKDIR=$HOME/weread-challenge mkdir -p $WORKDIR cd $WORKDIR cat > $WORKDIR/docker-compose.yml <<EOF services: app: image: jqknono/weread-challenge:latest pull_policy: always environment: - WEREAD_REMOTE_BROWSER=http://selenium:4444 - WEREAD_DURATION=68 volumes: - ./data:/app/data depends_on: selenium: condition: service_healthy selenium: image: selenium/standalone-chrome:4.26 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/data/login.png # 每天早上 7 点启动, 阅读 68 分钟 (crontab -l 2>/dev/null; echo "00 07 * * * cd $WORKDIR && docker compose up -d") | crontab - # 启动浏览器 docker run --restart always -d --name 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-chrome:4.26 WEREAD_USER="user" mkdir -p $HOME/weread-challenge/$WEREAD_USER/data # Get container IP Selenium_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' selenium-live) # 首次启动后, 需微信扫描二维码登录, 二维码保存在 $HOME/weread-challenge/$WEREAD_USER/data/login.png # 每天早上 7 点启动, 阅读 68 分钟 (crontab -l 2>/dev/null; echo "00 07 * * * docker run --rm --name ${WEREAD_USER}-read -v $HOME/weread-challenge/${WEREAD_USER}/data:/app/data -e WEREAD_REMOTE_BROWSER=http://${Selenium_IP}:4444 -e WEREAD_DURATION=68 -e WEREAD_USER=${WEREAD_USER} jqknono/weread-challenge:latest") | crontab - # 安装 nodejs winget install -e --id Node.js.Node.js # 创建运行文件夹 mkdir -p $HOME/weread-challenge cd $HOME/weread-challenge # 安装依赖 npm install selenium-webdriver # 通过环境变量设置运行参数 $WEREAD_BROWSER="MicrosoftEdge" # 运行 node weread-challenge.js Docker 运行同 Linux.
# 安装 nodejs brew install node # 创建运行文件夹 mkdir -p $HOME/weread-challenge # 安装依赖 npm install selenium-webdriver # 通过环境变量设置运行参数 WEREAD_BROWSER="safari" # 运行 node weread-challenge.js Docker 运行同 Linux.
# 启动浏览器 docker run --restart always -d --name 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=10 \ -e SE_NODE_MAX_SESSIOnS=10 \ -e SE_NODE_OVERRIDE_MAX_SESSIOnS=true \ selenium/standalone-chrome:4.26 WEREAD_USER1="user1" WEREAD_USER2="user2" mkdir -p $HOME/weread-challenge/$WEREAD_USER1/data mkdir -p $HOME/weread-challenge/$WEREAD_USER2/data # Get container IP Selenium_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' selenium-live) # 首次启动后, 需微信扫描二维码登录, 二维码保存在: # /$HOME/weread-challenge/${WEREAD_USER1}/data/login.png # /$HOME/weread-challenge/${WEREAD_USER2}/data/login.png # 每天早上 7 点启动, 阅读 68 分钟 (crontab -l 2>/dev/null; echo "00 07 * * * docker run --rm --name ${WEREAD_USER1}-read -v $HOME/weread-challenge/${WEREAD_USER1}/data:/app/data -e WEREAD_REMOTE_BROWSER=http://${Selenium_IP}:4444 -e WEREAD_DURATION=68 -e WEREAD_USER=${WEREAD_USER1} jqknono/weread-challenge:latest") | crontab - (crontab -l 2>/dev/null; echo "00 07 * * * docker run --rm --name ${WEREAD_USER2}-read -v $HOME/weread-challenge/${WEREAD_USER2}/data:/app/data -e WEREAD_REMOTE_BROWSER=http://${Selenium_IP}:4444 -e WEREAD_DURATION=68 -e WEREAD_USER=${WEREAD_USER2} jqknono/weread-challenge:latest") | crontab - | 环境变量 | 默认值 | 可选值 | 说明 |
|---|---|---|---|
WEREAD_USER | weread-default | - | 用户标识 |
WEREAD_REMOTE_BROWSER | "" | - | 远程浏览器地址 |
WEREAD_DURATION | 10 | - | 阅读时长 |
WEREAD_SELECTION | random | [0-4] | 选择阅读的书籍 |
WEREAD_BROWSER | chrome | chrome,MicrosoftEdge,firefox,safari | 浏览器 |
ENABLE_EMAIL | false | true,false | 邮件通知 |
EMAIL_SMTP | "" | - | 邮箱 SMTP 服务器 |
EMAIL_USER | "" | - | 邮箱用户名 |
EMAIL_PASS | "" | - | 邮箱密码 |
EMAIL_TO | "" | - | 收件人 |
WEREAD_AGREE_TERMS | true | true,false | 隐私同意条款 |
支持 linux/amd64,linux/arm64, 支持树莓派等开发板.
docker buildx create --name weread-challenge docker buildx use weread-challenge docker buildx inspect --bootstrap docker buildx build --platform linux/amd64,linux/arm64 -t jqknono/weread-challenge:base -f Dockerfile.base --push . docker buildx build --platform linux/amd64,linux/arm64 -t jqknono/weread-challenge:latest -f Dockerfile.quick --push . [email protected], 本项目会立即删除cookies 部分信息, 以用于使用者统计和展示.用户名称 | 首次使用时间 | 最近使用时间 | 总使用次数 | 浏览器类型 | 操作系统类别 | 阅读时长设置 | 异常退出原因WEREAD_AGREE_TERMS=falsecookies 可用于微信读书网页登录, 登录后可以执行书架操作, 但本工具不会使用搜集的信息进行登录操作.设置->登录设备中确认登录设备. 1 Rat3 2024-12-26 18:09:32 +08:00 可以考虑放到青龙面板里 |
2 tanranran 2024-12-26 18:13:31 +08:00 +1 |
3 Gcourage 2024-12-26 23:58:45 +08:00 macOS node22.9 执行的时候提示 TypeError: _0x2f1dd9[("addArgumen" + "ts")] is not a function |
6 menyuguren 2024-12-27 10:04:52 +08:00 docker 提示找不到 cookies.json 文件,手动创建也不行 |
7 ColoThor 2024-12-27 10:38:58 +08:00 啊你这代码加密的 |
8 jqknono OP @menyuguren docker 在执行目录./data/login.png 扫码登录 |
10 jqknono OP @Gcourage 抱歉 safari 的页面解析确实和 chrome 的不一样, firefox 也没有充分测试. 鉴于本项目没什么收益, 也很小众, 我检视代码确认没有重要信息后, 就把非混淆的代码放出来. 大家可以自行修改, 但是希望保留我的统计. |
11 jqknono OP |
12 menyuguren 2024-12-27 14:55:27 +08:00 @jqknono 这个有了,也可以扫码,扫码成功后,提示没有找到或者打开 ./data/ cookies.json 文件,接着关闭浏览器 |
13 495127903 2024-12-27 15:21:53 +08:00 [INFO][2024-12-27 07:20:54.495]: Waiting for login... [INFO][2024-12-27 07:21:17.382]: Login completed. [INFO][2024-12-27 07:21:17.384]: Error: ENOENT: no such file or directory, open './data/cookies.json' [INFO][2024-12-27 07:21:17.384]: Quitting the browser... [INFO][2024-12-27 07:21:17.441]: Browser closed. 求解 |
14 jqknono OP |
15 Gcourage 2024-12-27 20:57:50 +08:00 @jqknono 非常感谢,本来我也怀疑是浏览器的问题,把 WEREAD_BROWSER="chrome",但是会运行后卡在 WEREAD_REMOTE_BROWSER not found. Running locally. 最近刚好想学点 js 代码,随便玩一玩,哈哈 |
17 jqknono OP |
19 steveway 2024-12-29 10:52:24 +08:00 考虑添加其他同志方式吗?比如 bark |
21 steveway 2024-12-29 12:20:01 +08:00 |
22 jqknono OP @steveway 这个工具用的人少,暂时不花时间了。通知功能实现了邮箱通知,可以自己登录一个邮箱发给自己或者发给另一个邮箱。 |
23 mashpolo 2024-12-30 15:23:24 +08:00 我看说是支持 arm64 的机器,貌似我拉镜像还拉不下来? no matching manifest for linux/arm64/v8 in the manifest list entries |
24 jqknono OP |
25 mashpolo 2024-12-30 17:05:42 +08:00 @jqknono #24 我使用的是一个 oracle 的机器,架构是 aarch64 ,使用 docker-compose 文件就一直报错。我换了一个 x86_64 的可以运行 |
26 jqknono OP @mashpolo 是 selenium 没有编 linux/arm64 的镜像, 那这篇文档里提的 arm64 仅我的镜像支持, selenium 需要使用远程浏览器到 x86 设备上的 selenium 容器.  |
27 dreamage 2025-01-05 22:30:50 +08:00 OP 好,可以增加个 EMAIL_FROM 字段吗,我是用的邮件服务 USER 是个帐号,发信时需要单独指定 FROM.另外请问使用“Docker Compose 运行”的话,是首次挂机吗,后面没有每天自动挂机机制?应该使用“创建定时任务 docker-compose”这种方式长期自动挂机? |
28 jqknono OP @dreamage 挂机的确是使用的 cronjob 定时任务, 没有长期挂机, 阅读任务没有一直运行, 只是浏览器会一直运行, 因为我还不知道退出浏览器容器的方法. EMAIL_FROM 字段中午加上. 可以关注下开源项目, 这个小脚本是开源的, https://github.com/jqknono/weread-challenge-selenium |