Registro automático de tiempo de lectura en WeChat

WeChat Reading Challenge Member Helper es una herramienta que ayuda a los usuarios a obtener una membresía de WeChat Reading a un costo más bajo, mediante funciones de lectura y registro automatizados para completar las tareas de desafío de WeChat Reading y así obtener beneficios de membresía. La herramienta es compatible con múltiples plataformas y navegadores, y ofrece opciones de configuración ricas y funciones de tareas programadas.

Solo para comprar un poco más barato la membresía de WeChat Reading.

Esta documentación puede estar desactualizada. Para obtener la versión más reciente, visite la dirección del código abierto: https://github.com/jqknono/weread-challenge-selenium

Solo para comprar un poco más barato la membresía de WeChat Reading

Reglas de WeChat Reading

  • La lectura fuera de línea cuenta para el tiempo total, pero necesita conexión a internet para reportarse
  • La versión web, pantalla de tinta electrónica, mini programa, audiolibros y escucha de audiolibros cuentan para el tiempo total
  • Para comportamientos de lectura o escucha automática de larga duración, la plataforma juzgará combinando las características del comportamiento del usuario, la parte excesiva no contará para el tiempo total
  • Un día de lectura se considera válido cuando supera los 5 minutos ese día
  • Pagar 5 yuanes obtiene inmediatamente 2 días de membresía, y luego registrar 29 días en 30 días consecutivos, con tiempo de lectura superior a 30 horas, permite obtener 30 días de membresía y 30 monedas de libros
  • Pagar 50 yuanes obtiene inmediatamente 30 días de membresía, y luego registrar 360 días en 365 días consecutivos, con tiempo de lectura superior a 300 horas, permite obtener 365 días de membresía y 500 monedas de libros

Según la operación práctica, también hay características no especificadas claramente:

  • Después del registro del día 29, se obtiene inmediatamente la recompensa de la membresía de lectura, y se puede iniciar inmediatamente el siguiente ciclo de registro de desafío de la membresía, sin necesidad de esperar hasta el día 31 para iniciar el siguiente ciclo de desafío. El registro del día 29 cuenta tanto para el ciclo anterior como para el siguiente.
  • Excepto el primer ciclo que necesita 29 días, los ciclos posteriores pueden obtener 32 días de membresía cada 28 días. 1+28*13=365, se pueden completar 13 ciclos al año, gastando 65 yuanes, obteniendo 32*13=416 días de membresía y 390 monedas de libros.
  • Aún así, el desafío de la tarjeta anual sigue siendo más rentable, pero con un ciclo más largo y mayor riesgo.

Características de la herramienta

  • Usa navegador con interfaz gráfica
  • Compatible con navegadores locales y remotos
  • Ancho y alto aleatorios del navegador
  • Compatible con espera de inicio de sesión
  • Compatible con actualización del código QR de inicio de sesión
  • Compatible con guardar cookies
  • Compatible con cargar cookies
  • Compatible con seleccionar el libro X más reciente para comenzar a leer
  • Por defecto selecciona aleatoriamente un libro para comenzar a leer
  • Compatible con lectura automática
  • Compatible con saltar al siguiente capítulo
  • Compatible con volver al primer capítulo después de terminar
  • Compatible con seleccionar velocidad de lectura
  • Tiempo de lectura aleatorio por página
  • Tiempo de volteo de página aleatorio
  • Captura de pantalla de la interfaz actual cada minuto
  • Compatible con registro de eventos
  • Compatible con tareas programadas
  • Compatible con establecer tiempo de lectura
  • Compatible con notificaciones por correo electrónico
  • Soporte multiplataforma: linux | windows | macos
  • Compatible con navegadores: chrome | MicrosoftEdge | firefox
  • Compatible con múltiples usuarios
  • Refresco forzado en caso de excepción
  • Uso de estadísticas

Linux

Ejecución directa

# Instalar nodejs
sudo apt install nodejs
# Las versiones antiguas de nodejs necesitan instalar npm
sudo apt install npm
# Crear carpeta de ejecución
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# Instalar dependencias
npm install selenium-webdriver
# Descargar script
wget https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -O weread-challenge.js
# Establecer parámetros de ejecución mediante variables de entorno
export WEREAD_BROWSER="chrome"
# Ejecutar
WEREAD_BROWSER="chrome" node weread-challenge.js

Para notificaciones por correo electrónico, instale nodemailer: npm install nodemailer

Ejecución con 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

Guarde como docker-compose.yml, ejecute docker compose up -d.
Después del primer inicio, necesita escanear el código QR con WeChat para iniciar sesión. El código QR se guarda en ./data/login.png

Ejecución con Docker

# Ejecutar 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

# Ejecutar 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

# Agregar otro usuario
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

Después del primer inicio, necesita escanear el código QR con WeChat para iniciar sesión. El código QR se guarda en ./data/login.png

Crear tareas programadas

Forma 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
# Después del primer inicio, necesita escanear el código QR con WeChat para iniciar sesión. El código QR se guarda en $HOME/weread-challenge/data/login.png
# Inicio a las 7:00 am todos los días, lectura de 68 minutos
(crontab -l 2>/dev/null; echo "00 07 * * *  cd $WORKDIR && docker compose up -d") | crontab -

Forma docker

# Iniciar navegador
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

# Obtener IP del contenedor
Selenium_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' selenium-live)

# Después del primer inicio, necesita escanear el código QR con WeChat para iniciar sesión. El código QR se guarda en $HOME/weread-challenge/$WEREAD_USER/data/login.png
# Inicio a las 7:00 am todos los días, lectura de 68 minutos
(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

# Instalar nodejs
winget install -e --id Node.js.Node.js
# Crear carpeta de ejecución
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# Instalar dependencias
npm install selenium-webdriver
# Descargar script powershell
Invoke-WebRequest -Uri https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -OutFile weread-challenge.js
# Establecer parámetros de ejecución mediante variables de entorno
$env:WEREAD_BROWSER="MicrosoftEdge"
# Ejecutar
node weread-challenge.js

La ejecución con Docker es igual que en Linux.

MacOS

# Instalar nodejs
brew install node
# Crear carpeta de ejecución
mkdir -p $HOME/Documents/weread-challenge
cd $HOME/Documents/weread-challenge
# Instalar dependencias
npm install selenium-webdriver
# Descargar script
wget https://storage1.techfetch.dev/weread-challenge/weread-challenge.js -O weread-challenge.js
# Establecer parámetros de ejecución mediante variables de entorno
export WEREAD_BROWSER="chrome"
# Ejecutar
node weread-challenge.js

La ejecución con Docker es igual que en Linux.

Soporte multiusuario

# Iniciar navegador
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

# Obtener IP del contenedor
Selenium_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' selenium-live)

# Después del primer inicio, necesita escanear el código QR con WeChat para iniciar sesión. El código QR se guarda en:
# /$HOME/weread-challenge/${WEREAD_USER1}/data/login.png
# /$HOME/weread-challenge/${WEREAD_USER2}/data/login.png
# Inicio a las 7:00 am todos los días, lectura de 68 minutos
(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 -

Opciones configurables

Variable de entorno Valor por defecto Valores posibles Descripción
WEREAD_USER weread-default - Identificador de usuario
WEREAD_REMOTE_BROWSER "" - Dirección del navegador remoto
WEREAD_DURATION 10 - Duración de lectura
WEREAD_SPEED slow slow,normal,fast Velocidad de lectura
WEREAD_SELECTION random [0-4] Selección de libros
WEREAD_BROWSER chrome chrome,MicrosoftEdge,firefox Navegador
ENABLE_EMAIL false true,false Notificación por correo
EMAIL_SMTP "" - Servidor SMTP de correo
EMAIL_USER "" - Nombre de usuario de correo
EMAIL_PASS "" - Contraseña de correo
EMAIL_TO "" - Destinatario
WEREAD_AGREE_TERMS true true,false Aceptar términos de privacidad

Consideraciones

  • 28 días para completar 30 horas, necesita al menos 65 minutos al día, no 60 minutos al día.
  • La estadística de WeChat Reading puede perder algunos minutos, se espera obtener 65 minutos al día, se sugiere ajustar la duración de lectura a 68 minutos
  • La validez de las cookies de inicio de sesión mediante código QR en la web es de 30 días, después de 30 días necesita iniciar sesión nuevamente, adecuado para el desafío mensual de membresía
  • La notificación por correo electrónico puede ser identificada como correo basura, se sugiere agregar la lista blanca en el lado del destinatario
  • Este proyecto es solo para fines de aprendizaje e intercambio, no debe usarse para fines comerciales, ni para fines ilegales
  • Si existe alguna posible infracción, contacte a [email protected], este proyecto será eliminado inmediatamente

Política de privacidad

  • Obtención de privacidad
    • Este proyecto recopila parte de la información de cookies del usuario para estadísticas y visualización del usuario.
    • Recopila información de uso del usuario, incluyendo: nombre de usuario | fecha de primer uso | fecha de uso más reciente | número total de usos | tipo de navegador | tipo de sistema operativo | configuración de duración de lectura | motivo de salida anormal
    • Si no desea que se recopile ninguna información, puede establecer el parámetro de inicio WEREAD_AGREE_TERMS=false
  • Advertencia de riesgos
    • cookies pueden usarse para iniciar sesión en la versión web de WeChat Reading, después del inicio de sesión se pueden realizar operaciones en la estantería de libros, pero esta herramienta no usará la información recopilada para iniciar sesión.
    • El mecanismo de protección de Tencent asegura que cuando hay un inicio de sesión anormal, el cliente de teléfono móvil recibirá una advertencia de riesgo, y se puede confirmar el dispositivo de inicio de sesión en Configuración->Dispositivos de inicio de sesión en el cliente de teléfono móvil.
    • Esta herramienta está implementada completamente en js, fácil de desofuscar y extender, terceros pueden seguir desarrollando. Incluso confiando en esta herramienta, también debe confirmar regularmente el dispositivo de inicio de sesión al usar herramientas automatizadas, para evitar operaciones maliciosas en la estantería de libros.

Referencias