WeRead Otomatis Absen Durasi Baca

WeRead Challenge Membership Assistant adalah alat yang membantu pengguna mendapatkan keanggotaan WeRead dengan biaya lebih rendah, melalui fitur baca otomatis dan absen, membantu pengguna menyelesaikan tugas tantangan WeRead, sehingga memperoleh hak keanggotaan. Alat ini mendukung multi-platform, multi-browser, dan menyediakan opsi konfigurasi kaya serta fitur tugas terjadwal.

Hanya untuk membeli keanggotaan WeRead sedikit lebih murah.

Dokumen ini mungkin sudah usang, yang terbaru bisa mengunjungi alamat open source: https://github.com/jqknono/weread-challenge-selenium

Hanya untuk membeli keanggotaan WeRead sedikit lebih murah

Aturan WeRead

  • Membaca offline dihitung dalam total durasi, tetapi perlu laporan online
  • Versi web, e-ink, mini program, mendengarkan buku, mendengarkan audiobook semua dihitung dalam total durasi
  • Untuk perilaku baca otomatis atau mendengarkan terlalu lama dalam satu kali, platform akan menilai berdasarkan karakteristik perilaku pengguna, bagian terlalu lama tidak dihitung dalam total durasi
  • Membaca melebihi 5 menit sehari baru dihitung sebagai hari baca yang valid
  • Bayar 5 Yuan langsung dapat 2 hari keanggotaan, selanjutnya absen 29 hari dalam 30 hari, durasi baca melebihi 30 jam, bisa dapat 30 hari keanggotaan dan 30 buku koin
  • Bayar 50 Yuan langsung dapat 30 hari keanggotaan, selanjutnya absen 360 hari dalam 365 hari, durasi baca melebihi 300 jam, bisa dapat 365 hari keanggotaan dan 500 buku koin

Berdasarkan operasi aktual, ada karakteristik berikut yang tidak dijelaskan secara eksplisit:

  • Setelah absen hari ke-29 langsung mendapatkan hadiah keanggotaan baca, dan bisa langsung memulai putaran berikutnya absen tantangan keanggotaan, tidak perlu menunggu hari ke-31 memulai putaran berikutnya, absen hari ke-29既算作上一轮的打卡, 也算作下一轮的打卡.
  • Kecuali putaran pertama butuh 29 hari, selanjutnya setiap 28 hari bisa dapat 32 hari keanggotaan, 1+28*13=365, setahun bisa完成 13 轮, 花费 65 元, 获得 32*13=416 天会员和 390 书币.
  • Yang lebih menguntungkan tetap adalah tantangan keanggotaan tahunan, tapi siklus lebih lama, risiko lebih besar.

Fitur Alat

  • Menggunakan browser headful
  • Mendukung browser lokal dan remote
  • Lebar dan tinggi browser acak
  • Mendukung menunggu login
  • Mendukung refresh QR code login
  • Mendukung simpan cookies
  • Mendukung load cookies
  • Mendukung pilih buku ke-X yang baru dibaca untuk mulai membaca
  • Default memilih buku acak untuk mulai membaca
  • Mendukung baca otomatis
  • Mendukung lompat ke bab selanjutnya
  • Mendukung baca habis lompat kembali bab 1 lanjut baca
  • Mendukung pilih kecepatan baca
  • Waktu baca per halaman acak
  • Waktu ganti halaman acak
  • Screenshot界面当前每分钟
  • Mendukung log
  • Mendukung tugas terjadwal
  • Mendukung atur waktu baca
  • Mendukung notifikasi email
  • Dukungan multi-platform: linux | windows | macos
  • Dukungan browser: chrome | MicrosoftEdge | firefox
  • Mendukung multi-user
  • Paksa refresh saat异常
  • Statistik penggunaan

Linux

Jalankan Langsung

# 安装nodejs
sudo apt install nodejs
# 老旧版本的 nodejs 需要安装 npm
sudo apt install npm
# 创建运行文件夹
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# 安装依赖
npm install selenium-webdriver
# 下载脚本
wget https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -O weread-challenge.js
# 通过环境变量设置运行参数
export WEREAD_BROWSER="chrome"
# 运行
WEREAD_BROWSER="chrome" node weread-challenge.js

如需邮件通知, 需安装 nodemailer: npm install nodemailer

Jalankan 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

Simpan sebagai docker-compose.yml, jalankan docker compose up -d.
首次启动后, 需微信扫描二维码登录, 二维码保存在 ./data/login.png

Jalankan 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: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

首次启动后, 需微信扫描二维码登录, 二维码保存在 ./data/login.png

Buat Tugas Terjadwal

Cara 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 -

Cara 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/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# 安装依赖
npm install selenium-webdriver
# 下载脚本powershell
Invoke-WebRequest -Uri https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -OutFile weread-challenge.js
# 通过环境变量设置运行参数
$env:WEREAD_BROWSER="MicrosoftEdge"
# 运行
node weread-challenge.js

Docker 运行同 Linux.

MacOS

# 安装nodejs
brew install node
# 创建运行文件夹
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# 安装依赖
npm install selenium-webdriver
# 下载脚本
wget https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -O weread-challenge.js
# 通过环境变量设置运行参数
export WEREAD_BROWSER="chrome"
# 运行
node weread-challenge.js

Docker 运行同 Linux.

Dukungan Multi-User

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

Item Dapat Dikonfigurasi

Variabel LingkunganNilai DefaultNilai OpsionalKeterangan
WEREAD_USERweread-default-Identitas pengguna
WEREAD_REMOTE_BROWSER""-Alamat browser remote
WEREAD_DURATION10-Durasi baca
WEREAD_SPEEDslowslow,normal,fastKecepatan baca
WEREAD_SELECTIONrandom[0-4]Pilih buku baca
WEREAD_BROWSERchromechrome,MicrosoftEdge,firefoxBrowser
ENABLE_EMAILfalsetrue,falseNotifikasi email
EMAIL_SMTP""-Server SMTP email
EMAIL_USER""-Username email
EMAIL_PASS""-Password email
EMAIL_TO""-Penerima
WEREAD_AGREE_TERMStruetrue,falsePersetujuan ketentuan privasi

Catatan

  • 28 hari penuh 30 jam, butuh minimal 65 menit per hari, bukan 60 menit per hari.
  • Statistik WeRead mungkin kehilangan beberapa menit, harap dapat 65 menit per hari, disarankan atur durasi baca ke 68 menit
  • Cookies login scan QR web berlaku 30 hari, setelah 30 hari perlu scan QR login ulang, cocok untuk tantangan keanggotaan bulanan
  • Notifikasi email mungkin dikenali sebagai spam, disarankan tambahkan whitelist di pihak penerima
  • Proyek ini hanya untuk belajar dan pertukaran, jangan gunakan untuk keperluan komersial, jangan gunakan untuk keperluan ilegal
  • Jika ada kemungkinan pelanggaran, silakan hubungi weread-challenge@techfetch.dev, proyek ini akan segera dihapus

Kebijakan Privasi

  • Pengumpulan Privasi
    • Proyek ini mengumpulkan sebagian informasi cookies pengguna, untuk statistik dan tampilan pengguna.
    • Mengumpulkan informasi penggunaan pengguna, termasuk: Nama pengguna | Waktu pertama kali menggunakan | Waktu terakhir menggunakan | Total jumlah penggunaan | Jenis browser | Kategori sistem operasi | Pengaturan durasi baca | Alasan keluar异常
    • Jika tidak ingin dikumpulkan informasi apa pun, bisa atur parameter启动WEREAD_AGREE_TERMS=false
  • Peringatan Risiko
    • cookies bisa用于登录网页 WeRead, login后可以执行书架操作, 但工具 ini tidak akan menggunakan informasi terkumpul untuk operasi login.
    • Mekanisme perlindungan Tencent memastikan saat login异常, klien ponsel akan menerima peringatan risiko, bisa di klien ponselPengaturan->Perangkat Login中确认登录设备.
    • Alat ini murni implementasi js, mudah deobfuscate dan extend, pihak ketiga bisa继续开发. 即使信任本工具, 使用自动化工具时也应经常确认登录设备, 避免书架被恶意操作.

Referensi