Communitygithub.com

baihe26/zju-literature-downloader

Permite buscar, descargar, organizar, reintentar y leer PDFs académicos y materiales de apoyo utilizando el acceso institucional autenticado de la Biblioteca de la Universidad de Zhejiang (WebVPN, CAS SSO, Summon, ScienceDirect, etc.).

¿Qué es zju-literature-downloader?

Esta habilidad convierte el flujo de trabajo de autenticación institucional de la Universidad de Zhejiang en un proceso repetible y legal para la descarga y lectura de documentos académicos. Está diseñada para agentes como Claude Code, Cursor, Codex y otros, utilizando el navegador Chrome ya autenticado del usuario para acceder a recursos como la Biblioteca de la Universidad de Zhejiang, WebVPN, CAS SSO, Summon, ScienceDirect y plataformas de editoriales. La habilidad se centra en la integridad legal: no elude paywalls, CAPTCHA ni verificaciones de bots; en su lugar, solicita la intervención manual del usuario cuando es necesario. El flujo de trabajo típico incluye buscar por DOI o título en Summon, navegar a través de enlaces institucionales, extraer PDFs mediante el proxy CDP (Chrome DevTools Protocol), y clasificar cada artículo en un estado detallado (por ejemplo, 'download', 'cas_waiting_user', 'sciencedirect_robot_check'). Está optimizada para lotes pequeños (5-10 artículos) y mantiene un manifiesto de auditoría claro. No requiere contraseñas ni cookies; solo usa la sesión activa del navegador del usuario.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add baihe26/zju-literature-downloader

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

ZJU Literature Downloader

Esta habilidad convierte el flujo de trabajo verificado en un proceso repetible y legal para encontrar, descargar y leer artículos a través del acceso a la Biblioteca de la Universidad de Zhejiang / WebVPN del usuario.

Límites

Utilice exclusivamente el acceso institucional legítimo del usuario. No eluda paywalls, DRM, CAPTCHA, Cloudflare, comprobaciones de bots de editoriales ni la autenticación de dos factores. Si una página solicita CAPTCHA, inicio de sesión QR, SMS/OTP, Cloudflare, comprobaciones de bots de editoriales o un desafío de seguridad, deténgase y pida al usuario que lo complete en Chrome.

Evite descargas masivas. Trabaje en lotes pequeños, preferiblemente después de que el usuario confirme la lista de artículos. Deje un rastro de auditoría claro de lo que se descargó, de dónde y si se encontró información complementaria.

No pida al usuario que pegue contraseñas institucionales, credenciales CAS, códigos OTP, códigos de recuperación ni tokens de sesión en el chat o terminal. Si el usuario ofrece una contraseña, rechácela y utilice el flujo de trabajo de inicio de sesión delegado en su lugar.

Excepción para páginas de inicio de sesión guardado de ZJU CAS: si el usuario indica explícitamente que Chrome ya ha rellenado las credenciales de ZJU CAS y autoriza hacer clic en el botón de inicio de sesión/confirmación, el agente puede hacer clic en ese botón una vez en la página ZJU CAS/WebVPN/institucional SSO sin leer, copiar ni escribir ninguna credencial. Esta excepción no se aplica a CAPTCHA, inicio de sesión QR, SMS/OTP, comprobaciones de bots de editoriales ni a ninguna página fuera del flujo de inicio de sesión institucional esperado.

No inspeccione ni exporte cookies, contraseñas, almacenamiento local, perfiles de navegador ni archivos de sesión. Utilice únicamente el contexto de página ya autenticada del navegador.

Precondiciones

Antes de intentar descargas, confirme estas condiciones:

  1. Chrome está abierto en la máquina del usuario.
  2. El usuario ha iniciado sesión personalmente en la Biblioteca de la Universidad de Zhejiang / WebVPN en Chrome.
    • Páginas comunes: https://libweb.zju.edu.cn/, https://webvpn.zju.edu.cn/, https://zju.summon.serialssolutions.com/.
  3. La depuración remota de Chrome está permitida para la instancia actual del navegador.
    • Pida al usuario que abra chrome://inspect/#remote-debugging.
    • Debe activar Permitir depuración remota para esta instancia del navegador.
  4. El entorno puede ejecutar Node.js 22+.
    • Intente node --version.
    • Si node no está en PATH en Codex Desktop, intente %LOCALAPPDATA%\OpenAI\Codex\bin\node.exe.
  5. El proxy CDP de acceso web está disponible o se puede iniciar.
    • Ruta típica de Claude Code: %USERPROFILE%\.claude\skills\web-access-main\scripts\check-deps.mjs.
    • Ruta típica de agente compartido: %USERPROFILE%\.agents\skills\web-access-main\scripts\check-deps.mjs.
    • En configuraciones solo de Codex, verifique también %USERPROFILE%\.codex\skills\web-access-main\scripts\check-deps.mjs.
  6. El usuario ha aprobado la carpeta de salida objetivo.

Si Claude Code indica que esta habilidad no está instalada, instálela o cópiela en:

$env:USERPROFILE\.claude\skills\zju-literature-downloader

Codex y otras configuraciones de agente pueden usar .codex\skills o .agents\skills; trate las tres ubicaciones como objetivos de instalación, no como versiones diferentes de la habilidad.

Alcance del Lote

Se admiten lotes pequeños cuando el usuario proporciona una lista definitiva de DOI/título/PMID.

Límites recomendados:

  • lote normal: 5-10 artículos
  • lote práctico superior: 15-20 artículos, con pausas y un manifiesto
  • deténgase inmediatamente si aparecen comprobaciones de editoriales, CAPTCHA, caducidad de WebVPN o avisos de descarga inusuales

No convierta una búsqueda amplia por palabra clave en una descarga automática ilimitada. No descargue números completos de revistas, volúmenes ni conjuntos de resultados grandes.

Categorías de Estado

Clasifique cada artículo en uno de estos estados y mantenga el estado en el manifiesto:

downloaded
downloaded_with_si
si_only_downloaded
cas_waiting_user
institutional_login_waiting_user
cas_resolved_retry_needed
publisher_verification_waiting_user
sciencedirect_robot_check
retry_after_user_verification
do_not_auto_retry
url_needs_repair
summon_no_link
summon_unreachable
browser_pdf_viewer_fallback_needed
publisher_blocked_waiting_user
no_authorized_pdf_found
failed_after_retry
ip_not_authorized
purchase_required

Use cas_waiting_user cuando el navegador esté visiblemente en el CAS / autenticación unificada de identidad de la Universidad de Zhejiang. Use institutional_login_waiting_user cuando el artículo aún esté en un selector de institución, paso CARSI/Shibboleth/OpenAthens o SSO equivalente antes de CAS. Ambos son estados no finales; mantenga cas_waiting_user para manifiestos compatibles con versiones anteriores.

Use si_only_downloaded cuando uno o más archivos oficiales de información complementaria se hayan verificado pero el PDF del artículo principal siga sin estar disponible a través del acceso autorizado del usuario. No llame a esto downloaded.

Use summon_unreachable cuando el SPA de Summon devuelva repetidamente ERR_EMPTY_RESPONSE o no pueda cargarse después de un reintento simple. Use browser_pdf_viewer_fallback_needed cuando Chrome muestre visiblemente el PDF pero fetch() del contexto del navegador no pueda recuperar sus bytes. Ninguno de estos estados significa que el artículo no esté disponible; ambos especifican la alternativa legítima siguiente.

Use publisher_verification_waiting_user o sciencedirect_robot_check cuando una página de editorial muestre "¿Eres un robot?", CAPTCHA, Cloudflare, verificación de bot u otro desafío antiautomatización. No trate esto como un fallo final, pero no intente resolverlo automáticamente.

Iniciar Control de Chrome

Use el proxy CDP de acceso web cuando esté disponible.

En Windows PowerShell:

$node = "node"
if (-not (Get-Command node -ErrorAction SilentlyContinue)) {
  $node = "$env:LOCALAPPDATA\OpenAI\Codex\bin\node.exe"
}
$checkDepsCandidates = @(
  "$env:USERPROFILE\.claude\skills\web-access-main\scripts\check-deps.mjs",
  "$env:USERPROFILE\.agents\skills\web-access-main\scripts\check-deps.mjs",
  "$env:USERPROFILE\.codex\skills\web-access-main\scripts\check-deps.mjs"
)
$checkDeps = $checkDepsCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1
if (-not $checkDeps) { throw "web-access-main/scripts/check-deps.mjs no encontrado" }
& $node $checkDeps

Luego pruebe:

Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:3456/targets" -TimeoutSec 10

Si esto se cuelga o falla:

  • Pida al usuario que confirme la casilla de depuración remota.
  • Verifique %TEMP%\cdp-proxy.log.
  • No intente leer archivos de sesión de Chrome.

API Principal del Proxy CDP

El proxy de acceso web habitual es http://127.0.0.1:3456.

EndpointMétodoPropósito
/healthGETEstado del proxy y conexión con Chrome
/targetsGETListar pestañas abiertas de Chrome
/new?url=...GETCrear una nueva pestaña en segundo plano
/navigate?target=...&url=...GETNavegar en una pestaña existente
/close?target=...GETCerrar una pestaña
/info?target=...GETObtener título, URL y readyState de la página
/eval?target=...POST body=JSEjecutar JavaScript en una pestaña y devolver { value: ... }
/clickAt?target=...POST body=selector CSSHacer clic en el centro de un elemento visible

Use /navigate en lugar de /new para URLs de Summon que contengan fragmentos #!. Si se elimina un fragmento #!, Chrome puede abrir about:blank o una página incorrecta. Si curl no está disponible, use Invoke-WebRequest de PowerShell para comprobaciones simples o fetch() de Node.js para llamadas al proxy.

Flujo de Búsqueda Recomendado

Prefiera la ruta de descubrimiento de la biblioteca antes que las páginas de editorial directas. Es más estable y tiene menos probabilidades de desencadenar protección antibot.

  1. Busque por DOI o título exacto en ZJU Summon:
    • https://zju.summon.serialssolutions.com/search?#!/search?pn=1&ho=t&include.ft.matches=f&l=en&q=<DOI o título codificado en URL>
  2. Abra las URLs de Summon a través de scripts/cdp_open_url.mjs o, de lo contrario, codifique completamente la URL anidada al llamar al proxy CDP. Summon usa #!; si el fragmento # se elimina, Chrome puede abrir about:blank o la página incorrecta.
  3. Lea la página de resultados con /eval.
  4. Extraiga enlaces cuyo texto visible o aria-label sea:
    • PDF
    • 在线全文
    • Full Text
    • View PDF
    • entradas de texto completo específicas de la editorial.
  5. Prefiera el enlace PDF del resultado cuando esté presente.
  6. Abra el enlace PDF en una nueva pestaña en segundo plano a través del proxy CDP.
  7. Si la editorial muestra un desafío de seguridad, pida al usuario que lo complete manualmente.
  8. Una vez que el PDF sea visible en Chrome, use scripts/browser_pdf_downloader.mjs para guardarlo desde el contexto autenticado del navegador.

Notas de Campo de Summon

Al extraer PDF, texto completo en línea o enlaces de editorial de Summon:

  1. Omita valores href vacíos. La primera coincidencia de texto completo en línea puede ser un conmutador de faceta en lugar de un enlace real.
  2. Trate a Summon como un SPA lento: espere unos 6 segundos después de la navegación, luego reintente la extracción de enlaces hasta 3 veces con pausas cortas.
  3. Si Summon redirige a login.serialssolutions.com/sso/login e indica que la IP está fuera del rango autorizado, registre ip_not_authorized. En ese caso, el usuario puede necesitar el cliente ZJU RVPN/SSLVPN, no solo WebVPN en una página del navegador, porque las pestañas de Chrome controladas por CDP pueden seguir usando la IP de la red local.
  4. Si Summon no tiene PDF pero tiene un enlace de texto completo en línea, siga esa ruta antes de construir una URL de editorial manualmente.
  5. Si la página muestra consistentemente ERR_EMPTY_RESPONSE o no se renderiza después de una navegación nueva y las esperas normales del SPA, registre summon_unreachable. No haga bucles en Summon: intente la página de aterrizaje de la editorial del DOI o una ruta OA confirmada una vez, aún usando la sesión de navegador autorizada del usuario cuando sea necesario.

Patrones Específicos de Editoriales

Utilícelos como sugerencias de reparación basadas en DOI solo después de confirmar la identidad del artículo. No reivindique acceso si la página o el PDF no están realmente verificados.

ACS Publications

Para el prefijo DOI 10.1021/...:

https://pubs.acs.org/doi/pdf/<doi>

La información complementaria de ACS a menudo sigue:

https://pubs.acs.org/doi/suppl/<doi>/suppl_file/<código-revista>_si_001.pdf

El ejemplo verificado 10.1021/acs.biomac.4c00102 usó bm4c00102_si_001.pdf.

Comience desde la página de aterrizaje del artículo de ACS siempre que sea posible. Un breve mensaje chino 请稍候... puede desaparecer por sí solo; espere unos 5-10 segundos e inspeccione la página una vez antes de clasificarla como un desafío de editorial. Una página de resumen legible no prueba que el PDF principal esté autorizado: si todavía muestra Available to Purchase o Access through Institution, registre el estado de inicio de sesión institucional o compra correspondiente y deje cualquier selección de inicio de sesión al usuario.

Los enlaces de información complementaria de ACS que se muestran en la página del artículo pueden llevar legítimamente a descargas de ACS Figshare / ndownloader.figstatic.com incluso cuando el PDF principal no está autorizado. Siga los enlaces oficiales visibles, verifique el SI PDF resultante y registre si_only_downloaded hasta que el artículo principal también esté verificado. No adivine un nombre de archivo de suplemento más allá de un enlace de la página del artículo, y no trate un SI accesible como permiso para recuperar el artículo principal con paywall.

Wiley

Para prefijos DOI como 10.1002/... o 10.1111/..., primero navegue a la página de artículo autenticada de Wiley, luego obtenga desde el origen de esa página:

<location.origin>/doi/pdfdirect/<doi>?download=true

No codifique onlinelibrary.wiley.com: Summon puede autenticar a través de un subdominio como advanced.onlinelibrary.wiley.com, y las recuperaciones de origen cruzado pueden fallar. También evite navegar la pestaña directamente a pdfdirect, porque el navegador puede iniciar una descarga y dejar el contexto de la página inutilizable. Prefiera fetch() del contexto de la página.

Springer Nature

Para prefijos DOI como 10.1007/... y 10.1186/...:

https://link.springer.com/content/pdf/<doi>.pdf

Esto suele funcionar después de que se resuelve el inicio de sesión institucional. Use fetch del contexto del navegador si la descarga directa del shell devuelve 401, 403 o una página de inicio de sesión HTML.

Nature Communications

Para patrones de DOI OA como 10.1038/s41467-..., intente:

https://www.nature.com/articles/<id-artículo>.pdf

Extraiga <id-artículo> del sufijo del DOI y aún verifique la cabecera y el texto del PDF.

bioRxiv

Para el prefijo DOI 10.1101/..., intente:

https://www.biorxiv.org/content/<doi>v1.full.pdf

Si la versión 1 devuelve 404, intente la página del artículo o una versión posterior. Verifique que el título coincida.

Frontiers

Para el prefijo DOI 10.3389/..., intente:

https://www.frontiersin.org/articles/<doi>/pdf

Si falla, abra primero la página del artículo y use su enlace PDF visible.

RSC Publishing

Para el prefijo DOI 10.1039/..., no asuma que ZJU tiene acceso autorizado al texto completo. Si los enlaces PDF devuelven 404 o páginas de compra, inspeccione la página del artículo y registre no_authorized_pdf_found o purchase_required en lugar de reintentar agresivamente.

Verificación de Editoriales y ScienceDirect

ScienceDirect y algunas plataformas de editoriales pueden mostrar "¿Eres un robot?", CAPTCHA, Cloudflare, verificación de bot o comprobaciones similares después de navegaciones repetidas directas por DOI o apertura automatizada de pestañas. Estas páginas son desafíos de seguridad y antiautomatización, no confirmaciones de inicio de sesión ordinarias.

Reduzca la probabilidad de desencadenarlos utilizando un patrón de acceso conservador:

  1. Prefiera los enlaces de ZJU Summon / WebVPN / biblioteca 在线全文 antes de la navegación directa doi.org -> editorial.
  2. Procese ScienceDirect y otras editoriales sensibles un artículo a la vez.
  3. Mantenga un rastro de auditoría visible en el manifiesto; no abra muchas pestañas de editoriales en paralelo.
  4. Espere a que cada página se estabilice antes de buscar Download PDF, View PDF o PDF.
  5. Reutilice la misma pestaña después de que el usuario complete un paso de verificación en lugar de abrir nuevas pestañas repetidamente.
  6. Evite bucles de reintento. Un intento automático fallido es suficiente antes de pasar la página al usuario.

Cuando aparezca una página de verificación de editorial:

  1. Detenga las acciones automatizadas en esa pestaña.
  2. Registre el artículo en publisher_verification.tsv o el manifiesto principal con el estado publisher_verification_waiting_user; use sciencedirect_robot_check para la página "¿Eres un robot?" de ScienceDirect.
  3. Informe al usuario qué artículo y pestaña necesitan atención manual.
  4. No haga clic en CAPTCHA, Cloudflare, "¿Eres un robot?", comprobaciones de bots ni controles de desafío similares automáticamente.
  5. Después de que el usuario diga que la verificación está completa, continúe normalmente.

Skills relacionados