微信读书挑战会员助手 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jqknono
V2EX    分享创造

微信读书挑战会员助手

  •  1
     
  •   jqknono 2024-12-26 18:06:53 +08:00 3847 次点击
    这是一个创建于 376 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微信读书挑战会员助手

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

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

    微信读书规则

    • 离线阅读计入总时长, 但需要联网上报
    • 网页版, 墨水屏, 小程序, 听书, 有声书收听都计入总时长
    • 对单次自动阅读或收听时长过长的行为, 平台将结合用户行为特征判断, 过长部分不计入总时长
    • 当日阅读超过5 分钟才算作有效阅读天数
    • 付费 5 元立即获得 2 天会员, 后续 30 日内打卡 29 天, 读书时长超过 30 小时, 可获得 30 天会员和 30 书币
    • 付费 50 元立即获得 30 天会员, 后续 365 日内打卡 360 天, 读书时长超过 300 小时, 可获得 365 天会员和 500 书币

    根据实际操作, 还有如下未明确说明的特点:

    • 第 29 日打卡后立即获得读书会员奖励, 并可立即开始下一轮挑战会员打卡, 无需等待第 31 日开始下一轮挑战, 第 29 日的打卡既算上一轮的打卡, 也算下一轮的打卡.
    • 除第一轮需 29 日外, 后续每 28 日即可获得 32 日会员, 1+28*13=365, 一年可完成 13 轮, 花费 65 元, 获得 32*13=416 天会员和 390 书币.
    • 更划算的仍然是年卡挑战会员, 但周期更长, 风险更大.

    工具特性

    • 使用有头浏览器
    • 支持本地浏览器和远程浏览器
    • 随机浏览器宽度和高度
    • 支持等待登录
    • 支持登录二维码刷新
    • 支持保存 cookies
    • 支持加载 cookies
    • 支持选择最近阅读的第 X 本书开始阅读
    • 默认随机选择一本书开始阅读
    • 支持自动阅读
    • 支持跳到下一章
    • 支持读完跳回第一章继续阅读
    • 随机单页阅读时间
    • 随机翻页时间
    • 每分钟截图当前界面
    • 支持日志
    • 支持定时任务
    • 支持设置阅读时间
    • 支持邮件通知
    • 多平台支持: linux | windows | macos
    • 多架构支持: amd64 | arm64
    • 支持浏览器: chrome | MicrosoftEdge | firefox | safari
    • 支持多用户
    • 异常时强制刷新
    • 使用统计

    Linux

    直接运行

    下载链接: 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

    Docker Compose 运行

    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.

    Docker 运行

    # 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 

    创建定时任务

    docker-compose

    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

    # 启动浏览器 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 - 

    Windows

    # 安装 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.

    MacOS

    # 安装 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 . 

    注意事项

    • 28 日刷满 30 小时, 需每日至少 65 分钟, 而不是每日 60 分钟.
    • 微信读书统计可能会漏数分钟, 期望每日获得 65 分钟, 建议调整阅读时长到 68 分钟
    • 网页扫码登录 cookies 有效期为 30 天, 30 天后需重新扫码登录, 适合月挑战会员
    • 邮件通知可能被识别为垃圾邮件, 建议在收件方添加白名单
    • 本项目仅供学习交流使用, 请勿用于商业用途, 请勿用于违法用途
    • 如存在可能的侵权, 请联系 [email protected], 本项目会立即删除

    隐私政策

    • 隐私获取
      • 本项目搜集使用者的 cookies 部分信息, 以用于使用者统计和展示.
      • 搜集使用者的使用信息, 包含: 用户名称 | 首次使用时间 | 最近使用时间 | 总使用次数 | 浏览器类型 | 操作系统类别 | 阅读时长设置 | 异常退出原因
      • 如不希望被搜集任何信息, 可设置启动参数WEREAD_AGREE_TERMS=false
    • 风险提示
      • cookies 可用于微信读书网页登录, 登录后可以执行书架操作, 但本工具不会使用搜集的信息进行登录操作.
      • 腾讯保护机制确保异常登录时, 手机客户端将收到风险提示, 可在手机客户端设置->登录设备中确认登录设备.
      • 本工具纯 js 实现, 容易反混淆和扩展, 第三方可以继续开发. 即使信任本工具, 也应在使用自动化工具时, 经常确认登录设备, 避免书架被恶意操作.

    参考

    28 条回复    2025-01-06 09:26:28 +08:00
    Rat3
        1
    Rat3  
       2024-12-26 18:09:32 +08:00
    可以考虑放到青龙面板里
    tanranran
        2
    tanranran  
       2024-12-26 18:13:31 +08:00
    +1
    Gcourage
        3
    Gcourage  
       2024-12-26 23:58:45 +08:00
    macOS node22.9 执行的时候提示 TypeError: _0x2f1dd9[("addArgumen" + "ts")] is not a function
    jqknono
        4
    jqknono  
    OP
       2024-12-27 00:03:12 +08:00 via Android
    @Gcourage 我周末试下
    Gcourage
        5
    Gcourage  
       2024-12-27 00:10:44 +08:00
    @jqknono 多谢,也在尝试反混淆下,顺便学习下,哈哈
    menyuguren
        6
    menyuguren  
       2024-12-27 10:04:52 +08:00
    docker 提示找不到 cookies.json 文件,手动创建也不行
    ColoThor
        7
    ColoThor  
       2024-12-27 10:38:58 +08:00
    啊你这代码加密的
    jqknono
        8
    jqknono  
    OP
       2024-12-27 11:17:39 +08:00
    @menyuguren docker 在执行目录./data/login.png 扫码登录
    jqknono
        9
    jqknono  
    OP
       2024-12-27 11:17:54 +08:00
    @ColoThor 是混淆
    jqknono
        10
    jqknono  
    OP
       2024-12-27 11:31:36 +08:00
    @Gcourage 抱歉 safari 的页面解析确实和 chrome 的不一样, firefox 也没有充分测试. 鉴于本项目没什么收益, 也很小众, 我检视代码确认没有重要信息后, 就把非混淆的代码放出来. 大家可以自行修改, 但是希望保留我的统计.
    jqknono
        11
    jqknono  
    OP
       2024-12-27 12:02:04 +08:00
    menyuguren
        12
    menyuguren  
       2024-12-27 14:55:27 +08:00
    @jqknono 这个有了,也可以扫码,扫码成功后,提示没有找到或者打开 ./data/ cookies.json 文件,接着关闭浏览器
    495127903
        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.

    求解
    jqknono
        14
    jqknono  
    OP
       2024-12-27 15:54:49 +08:00
    @menyuguren
    @495127903 脚本运行目录下需创建 data 文件夹
    Gcourage
        15
    Gcourage  
       2024-12-27 20:57:50 +08:00
    @jqknono 非常感谢,本来我也怀疑是浏览器的问题,把 WEREAD_BROWSER="chrome",但是会运行后卡在
    WEREAD_REMOTE_BROWSER not found. Running locally. 最近刚好想学点 js 代码,随便玩一玩,哈哈
    Gcourage
        16
    Gcourage  
       2024-12-27 21:00:05 +08:00
    @jqknono 自己也学了点反混淆的东西,哈哈,你的开源的代码现在执行是没问题的
    jqknono
        17
    jqknono  
    OP
       2024-12-28 20:24:38 +08:00
    495127903
        18
    495127903  
       2024-12-28 22:42:15 +08:00
    @jqknono 收到,感谢修复
    steveway
        19
    steveway  
       2024-12-29 10:52:24 +08:00
    考虑添加其他同志方式吗?比如 bark
    jqknono
        20
    jqknono  
    OP
       2024-12-29 11:20:47 +08:00 via Android
    @steveway 那是啥?怎么添加呢?
    steveway
        21
    steveway  
       2024-12-29 12:20:01 +08:00
    jqknono
        22
    jqknono  
    OP
       2024-12-29 14:51:53 +08:00 via Android
    @steveway 这个工具用的人少,暂时不花时间了。通知功能实现了邮箱通知,可以自己登录一个邮箱发给自己或者发给另一个邮箱。
    mashpolo
        23
    mashpolo  
       2024-12-30 15:23:24 +08:00
    我看说是支持 arm64 的机器,貌似我拉镜像还拉不下来?
    no matching manifest for linux/arm64/v8 in the manifest list entries
    jqknono
        24
    jqknono  
    OP
       2024-12-30 16:39:59 +08:00
    @mashpolo 可以拉啊, 这是 1C2G 阿里香港倚天 arm64 的机器, 可以拉也可以运行
    ![]( )
    ![]( )
    mashpolo
        25
    mashpolo  
       2024-12-30 17:05:42 +08:00
    @jqknono #24 我使用的是一个 oracle 的机器,架构是 aarch64 ,使用 docker-compose 文件就一直报错。我换了一个 x86_64 的可以运行
    jqknono
        26
    jqknono  
    OP
       2024-12-30 17:14:56 +08:00
    @mashpolo 是 selenium 没有编 linux/arm64 的镜像, 那这篇文档里提的 arm64 仅我的镜像支持, selenium 需要使用远程浏览器到 x86 设备上的 selenium 容器.
    ![]( )
    dreamage
        27
    dreamage  
       2025-01-05 22:30:50 +08:00
    OP 好,可以增加个 EMAIL_FROM 字段吗,我是用的邮件服务 USER 是个帐号,发信时需要单独指定 FROM.另外请问使用“Docker Compose 运行”的话,是首次挂机吗,后面没有每天自动挂机机制?应该使用“创建定时任务
    docker-compose”这种方式长期自动挂机?
    jqknono
        28
    jqknono  
    OP
       2025-01-06 09:26:28 +08:00
    @dreamage 挂机的确是使用的 cronjob 定时任务, 没有长期挂机, 阅读任务没有一直运行, 只是浏览器会一直运行, 因为我还不知道退出浏览器容器的方法. EMAIL_FROM 字段中午加上. 可以关注下开源项目, 这个小脚本是开源的, https://github.com/jqknono/weread-challenge-selenium
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5245 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:51 PVG 16:51 LAX 00:51 JFK 03:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86