This is the multi-page printable view of this section.
Click here to print .
Return to the regular view of this page .
WeRead Experience Sharing
There are many free reading options, but WeRead truly offers one of the better experiences. Those seeking free books can look at zlibrary.
This post mainly covers the day-to-day use of WeRead and a few helpful tools. If any content infringes rights, please contact me for removal: [email protected]
WeChat Read Auto Check-in & Read-Time Boost
WeChat Read Challenge Assistant is a tool that helps users obtain WeChat Read membership at a lower cost through automated reading and check-in features. It completes WeChat Reading challenge tasks to unlock member privileges. The tool supports multiple platforms and browsers, provides rich configuration options, and scheduled tasks.
Thursday, December 05, 2024
Just to get a cheaper WeChat Read membership.
This document may be out of date; for the latest version visit the open-source repository: https://github.com/jqknono/weread-challenge-selenium
WeChat Read Rules
Offline reading counts toward the total, but must sync while online.
Web edition, e-ink, mini-program, TTS, and audiobook listening all count .
Sessions judged as “too long” in a single auto-read/listen will have the excess excluded based on behavioral features.
A day counts only after >5 minutes of reading that day.
Pay ¥5 to get 2 days of membership immediately; read for 29 of the next 30 days and rack up 30 hours to earn 30 more days + 30 coins.
Pay ¥50 to get 30 days immediately; read 360 of the next 365 days and reach 300 hours to earn 365 days + 500 coins.
Undocumented quirks observed in practice:
On the 29th day, after check-in, you instantly get the membership reward and can immediately start the next round of challenges—no need to wait until day 31. The 29th check-in is counted for both the previous and the next round.
After the first round (29 days), every 28 days grants 32 days of membership.
1 + 28 × 13 = 365 ⇒ 13 rounds a year, costing ¥65, yielding 32 × 13 = 416 days of membership + 390 coins.
The annual challenge is cheaper but runs longer and carries more risk.
Headful browser.
Local or remote browser support.
Random browser width & height.
Wait-for-login support.
QR login refresh support.
Save / load cookies.
Choose the X-th last-read book or pick at random.
Auto page turning.
Jump to next chapter.
Loop back to chapter 1 after finishing.
Configurable reading speed.
Random per-page and turn-page delays.
Screenshot every minute.
Logging.
Scheduled tasks.
Configurable reading duration.
Email notifications.
Multi-platform: linux | windows | macos
.
Browser support: chrome | MicrosoftEdge | firefox
.
Multi-user support.
Force refresh on error.
Usage stats.
Linux
Run Directly
# install nodejs
sudo apt install nodejs
# old nodejs versions need npm
sudo apt install npm
# create work dir
mkdir -p $HOME /Documents/weread-challenge
cd $HOME /Documents/weread-challenge
# install deps
npm install selenium-webdriver
# download script
wget https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -O weread-challenge.js
# set runtime param via env
export WEREAD_BROWSER = "chrome"
# run
WEREAD_BROWSER = "chrome" node weread-challenge.js
For e-mail notifications install nodemailer :
npm install nodemailer
Docker Compose Run
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
Save as docker-compose.yml
, then run docker compose up -d
.
On first launch you must scan the WeChat QR code; the code is saved in ./data/login.png
.
Docker Run
# 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:latest
# 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
On first launch you must scan the WeChat QR code; the code is saved in ./data/login.png
.
Create Cron Jobs
Via 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
# after first launch scan the QR code saved in $HOME/weread-challenge/data/login.png
# start at 07:00 daily, read for 68 min
( crontab -l 2>/dev/null; echo "00 07 * * * cd $WORKDIR && docker compose up -d" ) | crontab -
Via Docker only
# launch browser
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)
# after first launch scan the QR code saved in $HOME/weread-challenge/$WEREAD_USER/data/login.png
# start at 07:00 daily, read for 68 min
( 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
# install nodejs
winget install -e - -id Node . js . Node . js
# create work dir
mkdir -p $HOME / Documents / weread-challenge
cd $HOME / Documents / weread-challenge
# install deps
npm install selenium-webdriver
# download script via powershell
Invoke-WebRequest -Uri https : // storage1 . techfetch . dev / weread-challenge / weread-challenge . js -OutFile weread-challenge . js
# set runtime param
$env:WEREAD_BROWSER = "MicrosoftEdge"
# run
node weread-challenge . js
Docker usage is the same as on Linux.
MacOS
# install nodejs
brew install node
# create work dir
mkdir -p $HOME /Documents/weread-challenge
cd $HOME /Documents/weread-challenge
# install deps
npm install selenium-webdriver
# download script
wget https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -O weread-challenge.js
# set runtime param
export WEREAD_BROWSER = "chrome"
# run
node weread-challenge.js
Docker usage the same as on Linux.
Multi-User Support
# launch browser
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)
# after first launch, scan the QR codes stored in:
# /$HOME/weread-challenge/${WEREAD_USER1}/data/login.png
# /$HOME/weread-challenge/${WEREAD_USER2}/data/login.png
# start at 07:00 daily, read for 68 min
( 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 -
Configurable Options
Environment Variable
Default
Options
Description
WEREAD_USER
weread-default
-
User label
WEREAD_REMOTE_BROWSER
""
-
Remote browser URL
WEREAD_DURATION
10
-
Reading duration (min)
WEREAD_SPEED
slow
slow,normal,fast
Reading speed
WEREAD_SELECTION
random
[0-4]
Select book to read
WEREAD_BROWSER
chrome
chrome,MicrosoftEdge,firefox
Browser to use
ENABLE_EMAIL
false
true,false
Enable email notification
EMAIL_SMTP
""
-
SMTP server
EMAIL_USER
""
-
Username
EMAIL_PASS
""
-
Password/App key
EMAIL_TO
""
-
Recipient address
WEREAD_AGREE_TERMS
true
true,false
Privacy consent
Notes
28-day cycle → 30 hrs → at least 65 min daily (not 60).
WeChat Read’s count may drop a few minutes, so aim for 68 min instead of 65.
Login cookies via QR expire in 30 days—perfect for monthly challenges.
Emails may land in spam; whitelist the sender.
Educational use only—no commercial or illegal use.
If infringement is suspected, contact [email protected]
for immediate takedown.
Privacy Policy
Data Collected
Cookies used only for user stat display.
Usage stats: user name | first launch | last launch | total runs | browser | OS | reading duration | abnormal exit reason
.
Set WEREAD_AGREE_TERMS=false
to opt out entirely.
Risk Warning
Cookies can log into WeChat Read but this tool never uses them to log in again .
Tencent shows risk prompts on abnormal logins; check in mobile client under Settings → Logged-in Devices.
Pure JS, easily de-obfuscated—always verify logged-in devices when using automation.
References