Registro automático de tiempo de lectura en WeChat
Categories:
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

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
cookiesdel 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
- Este proyecto recopila parte de la información de
- Advertencia de riesgos
cookiespueden 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ónen 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
- Enlace de descarga del script: weread-challenge.js
- Dirección de código abierto: https://github.com/jqknono/weread-challenge-selenium
- Estadísticas: https://weread-challenge.techfetch.dev
- Fuente del artículo: https://blog.techfetch.dev