Communitygithub.com

baihe26/zju-literature-downloader

Permet de télécharger, organiser et lire légalement des PDF académiques via les accès institutionnels de l'Université du Zhejiang (bibliothèque, WebVPN, CAS, Summon, ScienceDirect, etc.).

Qu'est-ce que zju-literature-downloader ?

Cette compétence transforme un flux de travail vérifié d'accès institutionnel en un processus reproductible et légal pour rechercher, télécharger et lire des articles académiques via les accès de l'utilisateur à la bibliothèque de l'Université du Zhejiang / WebVPN. Elle est conçue pour fonctionner avec des agents comme Claude Code, Cursor, Codex, et supporte des plateformes comme Summon (求是学术搜索), ScienceDirect, ACS Publications, Wiley, Springer Nature, Nature Communications, bioRxiv, Frontiers, et RSC Publishing. La compétence utilise le proxy CDP web-access (Chrome DevTools Protocol) pour contrôler le navigateur Chrome de l'utilisateur déjà authentifié, en évitant de contourner les paywalls, CAPTCHA, Cloudflare ou toute forme d'authentification à deux facteurs. Elle classe chaque article selon des statuts précis (téléchargé, en attente de vérification éditeur, non autorisé, etc.) et applique des limites de lot pour éviter les téléchargements massifs, tout en laissant une trace d'audit claire. L'utilisateur doit avoir Chrome ouvert, être connecté manuellement aux services de l'université, et autoriser le débogage à distance. La compétence gère les cas complexes comme les défis de vérification éditeur (ScienceDirect, CAPTCHA) en demandant à l'utilisateur d'intervenir manuellement, et suit des schémas spécifiques par éditeur pour construire les URLs de PDF ou de matériel supplémentaire.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Téléchargeur de Littérature ZJU

Cette compétence transforme le flux de travail vérifié en un processus reproductible et légal pour trouver, télécharger et lire des articles via l'accès institutionnel de l'utilisateur à la bibliothèque de l'Université du Zhejiang / WebVPN.

Limites

Utilisez uniquement l'accès institutionnel légitime de l'utilisateur. Ne contournez pas les paywalls, DRM, CAPTCHA, Cloudflare, les vérifications de bots des éditeurs, ni l'authentification à deux facteurs. Si une page demande un CAPTCHA, une connexion QR, un SMS/OTP, Cloudflare, une vérification de bot ou un défi de sécurité, arrêtez-vous et demandez à l'utilisateur de le compléter dans Chrome.

Évitez les téléchargements de masse. Travaillez par petits lots, de préférence après que l'utilisateur a confirmé la liste d'articles. Laissez une trace d'audit claire de ce qui a été téléchargé, d'où, et si des informations supplémentaires ont été trouvées.

Ne demandez pas à l'utilisateur de coller des mots de passe institutionnels, des identifiants CAS, des codes OTP, des codes de récupération ou des jetons de session dans le chat ou le terminal. Si l'utilisateur propose un mot de passe, refusez et utilisez plutôt le flux de connexion par délégation.

Exception pour les pages de connexion enregistrée ZJU CAS : si l'utilisateur déclare explicitement que Chrome a déjà rempli les identifiants ZJU CAS et autorise à cliquer sur le bouton de connexion/confirmation, l'agent peut cliquer une fois sur ce bouton sur la page ZJU CAS/WebVPN/SSO institutionnelle sans lire, copier ou taper aucun identifiant. Cette exception ne s'applique pas aux CAPTCHA, connexion QR, SMS/OTP, vérifications de bot des éditeurs, ni à aucune page en dehors du flux de connexion institutionnel attendu.

N'inspectez pas et n'exportez pas les cookies, mots de passe, stockage local, profils de navigateur ou fichiers de session. Utilisez uniquement le contexte de page déjà authentifié du navigateur.

Préconditions

Avant de tenter des téléchargements, confirmez ces conditions :

  1. Chrome est ouvert sur la machine de l'utilisateur.
  2. L'utilisateur s'est personnellement connecté à la bibliothèque de l'Université du Zhejiang / WebVPN dans Chrome.
    • Pages courantes : https://libweb.zju.edu.cn/, https://webvpn.zju.edu.cn/, https://zju.summon.serialssolutions.com/.
  3. Le débogage à distance de Chrome est autorisé pour l'instance de navigateur actuelle.
    • Demandez à l'utilisateur d'ouvrir chrome://inspect/#remote-debugging.
    • Ils doivent activer Allow remote debugging for this browser instance.
  4. L'environnement peut exécuter Node.js 22+.
    • Essayez node --version.
    • Si node n'est pas dans PATH dans Codex Desktop, essayez %LOCALAPPDATA%\OpenAI\Codex\bin\node.exe.
  5. Le proxy CDP d'accès web est disponible ou peut être démarré.
    • Chemin typique pour Claude Code : %USERPROFILE%\.claude\skills\web-access-main\scripts\check-deps.mjs.
    • Chemin typique pour agent partagé : %USERPROFILE%\.agents\skills\web-access-main\scripts\check-deps.mjs.
    • Dans les configurations Codex uniquement, vérifiez aussi %USERPROFILE%\.codex\skills\web-access-main\scripts\check-deps.mjs.
  6. L'utilisateur a approuvé le dossier de sortie cible.

Si Claude Code indique que cette compétence n'est pas installée, installez-la ou copiez-la vers :

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

Codex et autres configurations d'agents peuvent utiliser .codex\skills ou .agents\skills à la place ; traitez les trois emplacements comme des cibles d'installation, pas comme des versions différentes de la compétence.

Portée des lots

Les petits lots sont pris en charge lorsque l'utilisateur fournit une liste définie de DOI / titres / PMID.

Limites recommandées :

  • lot normal : 5 à 10 articles
  • lot supérieur pratique : 15 à 20 articles, avec des pauses et un manifeste
  • arrêtez immédiatement si des vérifications d'éditeur, CAPTCHA, expiration WebVPN ou invites de téléchargement inhabituelles apparaissent

Ne transformez pas une recherche par mot-clé large en téléchargement automatique illimité. Ne téléchargez pas des numéros entiers de revues, des volumes ou de grands ensembles de résultats.

Catégories de statut

Classez chaque article dans l'un de ces statuts et conservez le statut dans le manifeste :

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

Utilisez cas_waiting_user lorsque le navigateur est visiblement sur la page CAS / authentification unifiée de l'Université du Zhejiang. Utilisez institutional_login_waiting_user lorsque l'article est encore à un sélecteur d'institution, une délégation CARSI/Shibboleth/OpenAthens, ou une étape SSO équivalente avant CAS. Les deux sont des états non finaux ; conservez cas_waiting_user pour la rétrocompatibilité des manifestes.

Utilisez si_only_downloaded lorsqu'un ou plusieurs fichiers d'informations supplémentaires officiels ont été vérifiés mais que le PDF de l'article principal reste indisponible via l'accès autorisé de l'utilisateur. N'appelez pas cela downloaded.

Utilisez summon_unreachable lorsque le SPA Summon renvoie à plusieurs reprises ERR_EMPTY_RESPONSE ou ne peut pas se charger après une seule nouvelle tentative. Utilisez browser_pdf_viewer_fallback_needed lorsque Chrome affiche visiblement le PDF mais que fetch() en contexte de navigateur ne peut pas récupérer ses octets. Aucun de ces statuts ne signifie que l'article est indisponible ; les deux spécifient la prochaine solution de repli légitime.

Utilisez publisher_verification_waiting_user ou sciencedirect_robot_check lorsqu'une page d'éditeur affiche "Are you a robot?", CAPTCHA, Cloudflare, vérification de bot ou un autre défi anti-automatisation. Ne traitez pas cela comme un échec définitif, mais n'essayez pas de le résoudre automatiquement.

Démarrer le contrôle de Chrome

Utilisez le proxy CDP d'accès web lorsqu'il est disponible.

Sous 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 not found" }
& $node $checkDeps

Testez ensuite :

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

Si cela bloque ou échoue :

  • Demandez à l'utilisateur de confirmer la case à cocher de débogage à distance.
  • Vérifiez %TEMP%\cdp-proxy.log.
  • N'essayez pas de lire les fichiers de session Chrome.

API du proxy CDP de base

Le proxy d'accès web habituel est http://127.0.0.1:3456.

Point de terminaisonMéthodeObjectif
/healthGETÉtat du proxy et connexion Chrome
/targetsGETLister les onglets Chrome ouverts
/new?url=...GETCréer un nouvel onglet en arrière-plan
/navigate?target=...&url=...GETNaviguer dans un onglet existant
/close?target=...GETFermer un onglet
/info?target=...GETObtenir le titre, l'URL et readyState de la page
/eval?target=...POST body=JSExécuter du JavaScript dans un onglet et retourner { value: ... }
/clickAt?target=...POST body=sélecteur CSSCliquer au centre d'un élément visible

Utilisez /navigate plutôt que /new pour les URL Summon contenant des fragments #!. Si un fragment #! est supprimé, Chrome peut ouvrir about:blank ou une page erronée. Si curl n'est pas disponible, utilisez PowerShell Invoke-WebRequest pour les vérifications simples ou fetch() de Node.js pour les appels au proxy.

Flux de recherche recommandé

Privilégiez la voie de découverte via la bibliothèque avant les pages d'éditeur directes. C'est plus stable et moins susceptible de déclencher une protection anti-bot.

  1. Recherchez par DOI ou titre exact dans ZJU Summon :
    • https://zju.summon.serialssolutions.com/search?#!/search?pn=1&ho=t&include.ft.matches=f&l=en&q=<DOI ou titre encodé URL>
  2. Ouvrez les URL Summon via scripts/cdp_open_url.mjs ou encodez complètement l'URL imbriquée lors de l'appel au proxy CDP. Summon utilise #! ; si le fragment # est supprimé, Chrome peut ouvrir about:blank ou la mauvaise page.
  3. Lisez la page de résultats avec /eval.
  4. Extrayez les liens dont le texte visible ou aria-label est :
    • PDF
    • 在线全文
    • Full Text
    • View PDF
    • entrées de texte intégral spécifiques à l'éditeur.
  5. Préférez le lien PDF du résultat lorsqu'il est présent.
  6. Ouvrez le lien PDF dans un nouvel onglet en arrière-plan via le proxy CDP.
  7. Si l'éditeur affiche un défi de sécurité, demandez à l'utilisateur de le compléter manuellement.
  8. Une fois le PDF visible dans Chrome, utilisez scripts/browser_pdf_downloader.mjs pour le sauvegarder à partir du contexte de navigateur authentifié.

Notes de terrain sur Summon

Lors de l'extraction de PDF, texte intégral en ligne ou liens d'éditeur depuis Summon :

  1. Ignorez les valeurs href vides. La première correspondance de texte intégral en ligne peut être un bouton de facette plutôt qu'un vrai lien.
  2. Traitez Summon comme un SPA lent : attendez environ 6 secondes après la navigation, puis réessayez l'extraction de liens jusqu'à 3 fois avec de courtes pauses.
  3. Si Summon redirige vers login.serialssolutions.com/sso/login et indique que l'IP est en dehors de la plage autorisée, enregistrez ip_not_authorized. Dans ce cas, l'utilisateur peut avoir besoin du client RVPN/SSLVPN ZJU, pas seulement de WebVPN dans une page de navigateur, car les onglets Chrome contrôlés par CDP peuvent encore utiliser l'IP du réseau local.
  4. Si Summon n'a pas de PDF mais a un lien de texte intégral en ligne, suivez cette voie avant de construire manuellement une URL d'éditeur.
  5. Si la page affiche systématiquement ERR_EMPTY_RESPONSE ou ne parvient pas à s'afficher après une nouvelle navigation fraîche et les attentes normales du SPA, enregistrez summon_unreachable. Ne bouclez pas sur Summon : essayez la page d'atterrissage de l'éditeur du DOI ou une route OA confirmée une fois, toujours en utilisant la session de navigateur autorisée de l'utilisateur si nécessaire.

Schémas spécifiques aux éditeurs

Utilisez-les comme indices de réparation basés sur le DOI uniquement après avoir confirmé l'identité de l'article. Ne prétendez pas avoir accès si la page ou le PDF n'est pas réellement vérifié.

ACS Publications

Pour le préfixe DOI 10.1021/... :

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

Les informations supplémentaires ACS suivent souvent :

https://pubs.acs.org/doi/suppl/<doi>/suppl_file/<code-revue>_si_001.pdf

L'exemple vérifié 10.1021/acs.biomac.4c00102 utilisait bm4c00102_si_001.pdf.

Partez de la page d'atterrissage de l'article ACS autant que possible. Un court interstitiel chinois 请稍候... peut se résoudre de lui-même ; attendez environ 5 à 10 secondes et inspectez la page une fois avant de la classer comme un défi d'éditeur. Une page de résumé lisible ne prouve pas que le PDF principal est autorisé : si elle affiche encore Available to Purchase ou Access through Institution, enregistrez le statut de connexion institutionnelle ou d'achat approprié et laissez toute sélection de connexion à l'utilisateur.

Les liens d'informations supplémentaires ACS affichés sur la page de l'article peuvent légitimement mener à des téléchargements ACS Figshare / ndownloader.figstatic.com même lorsque le PDF principal n'est pas autorisé. Suivez les liens officiels visibles, vérifiez le PDF SI résultant et enregistrez si_only_downloaded jusqu'à ce que l'article principal soit également vérifié. Ne devinez pas un nom de fichier supplémentaire au-delà d'un lien de page d'article, et ne traitez pas un SI accessible comme une permission pour récupérer l'article principal payant.

Wiley

Pour les préfixes DOI tels que 10.1002/... ou 10.1111/..., naviguez d'abord vers la page d'article Wiley authentifiée, puis récupérez à partir de l'origine de cette page :

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

Ne codez pas en dur onlinelibrary.wiley.com : Summon peut s'authentifier via un sous-domaine tel que advanced.onlinelibrary.wiley.com, et les récupérations cross-origin peuvent échouer. Évitez également de naviguer l'onglet directement vers pdfdirect, car le navigateur peut démarrer un téléchargement et rendre le contexte de la page inutilisable. Préférez fetch() en contexte de page.

Springer Nature

Pour les préfixes DOI tels que 10.1007/... et 10.1186/... :

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

Cela fonctionne généralement après la résolution de la connexion institutionnelle. Utilisez le fetch en contexte de navigateur si le téléchargement direct depuis le shell retourne 401, 403, ou une page de connexion HTML.

Nature Communications

Pour les motifs DOI OA tels que 10.1038/s41467-..., essayez :

https://www.nature.com/articles/<id-article>.pdf

Extrayez <id-article> du suffixe du DOI et vérifiez toujours l'en-tête et le texte du PDF.

bioRxiv

Pour le préfixe DOI 10.1101/..., essayez :

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

Si la version 1 retourne 404, essayez la page de l'article ou une version ultérieure. Vérifiez que le titre correspond.

Frontiers

Pour le préfixe DOI 10.3389/..., essayez :

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

Si cela échoue, ouvrez d'abord la page de l'article et utilisez son lien PDF visible.

RSC Publishing

Pour le préfixe DOI 10.1039/..., ne supposez pas que ZJU a un accès autorisé au texte intégral. Si les liens PDF retournent 404 ou des pages d'achat, inspectez la page de l'article et enregistrez no_authorized_pdf_found ou purchase_required plutôt que de réessayer agressivement.

Vérification éditeur et ScienceDirect

ScienceDirect et certaines plateformes d'éditeurs peuvent afficher "Are you a robot?", CAPTCHA, Cloudflare, vérification de bot ou des contrôles similaires après des navigations directes répétées vers des DOI ou l'ouverture automatisée d'onglets. Ces pages sont des défis de sécurité et anti-automatisation, pas des confirmations de connexion ordinaires.

Réduisez le risque de les déclencher en utilisant un modèle d'accès prudent :

  1. Préférez les liens ZJU Summon / WebVPN / bibliothèque 在线全文 avant la navigation directe doi.org -> éditeur.
  2. Traitez ScienceDirect et autres éditeurs sensibles un article à la fois.
  3. Conservez une trace d'audit visible dans le manifeste ; n'ouvrez pas de nombreux onglets d'éditeurs en parallèle.
  4. Attendez que chaque page se stabilise avant de chercher Download PDF, View PDF, ou PDF.
  5. Réutilisez le même onglet après que l'utilisateur a complété une étape de vérification au lieu d'ouvrir de nouveaux onglets répétés.
  6. Évitez les boucles de nouvelle tentative. Une tentative automatique échouée suffit avant de remettre la page à l'utilisateur.

Lorsqu'une page de vérification éditeur apparaît :

  1. Arrêtez les actions automatisées sur cet onglet.
  2. Enregistrez l'article dans publisher_verification.tsv ou le manifeste principal avec le statut publisher_verification_waiting_user ; utilisez sciencedirect_robot_check pour la page "Are you a robot?" de ScienceDirect.
  3. Dites à l'utilisateur quel article et quel onglet nécessitent une attention manuelle.
  4. Ne cliquez pas automatiquement sur CAPTCHA, Cloudflare, "Are you a robot?", vérification de bot ou des contrôles de défi similaires.
  5. Après que l'utilisateur a dit que la vérification est terminée, vous pouvez réessayer l'extraction et la récupération du PDF à partir du même onglet.

Téléchargement du PDF en basse qualité

Après avoir confirmé l'accès à un PDF éditeur, utilisez le téléchargement contextuel du navigateur. Ne sautez pas cette étape après avoir simplement trouvé la page ; les utilisateurs de la compétence veulent un fichier PDF réel.

Importation Zotero et lecture

Après le téléchargement, proposez d'importer chaque PDF avec son DOI ou titre dans Zotero. Si un serveur Zotero local (par exemple, localhost:23119) est détecté, envoyez l'URL du fichier PDF téléchargé à Zotero avec les métadonnées de l'article (DOI, titre, auteurs, journal, année). Ne devinez pas les données de citation ; extrayez-les de la page de l'article vérifiée.

Si Zotero n'est pas connecté, demandez à l'utilisateur de démarrer Zotero et d'activer le connecteur.

Suggérez ensuite de lire le PDF téléchargé en utilisant la capacité de lecture de fichiers de l'agent ou l'outil de lecture d'article, si disponible. Demandez toujours la permission avant d'ouvrir et de lire un PDF.

Débogage et lecture de logs

Fichiers de log

  • Log proxy CDP : %TEMP%\cdp-proxy.log
  • Manifestes de téléchargement : dans le dossier de sortie, nommés zju_lit_manifest_*.tsv

Lisez ces fichiers lorsque l'utilisateur signale des erreurs ; ne les ouvrez pas inutilement.

Journalisation de l'activité de la compétence

Enregistrez chaque article traité dans un manifeste TSV contenant :

ChampObjectif
statusCatégorie de statut
doiDOI de l'article, si disponible
titleTitre tel que trouvé
urlURL de la page de l'article
pdf_urlURL du PDF réel téléchargé
publisherÉditeur ou plateforme
si_foundBooléen, informations supplémentaires trouvées
downloaded_atHorodatage
notesTexte libre (défi de vérification, étape utilisateur nécessaire, etc.)

Utilisez le séparateur tabulation. Lisez et mettez à jour le manifeste tout au long de la session. Enregistrez un fichier par session ; ne remplissez pas les entrées manquantes de sessions précédentes.

Notes de mise en œuvre

  • Utilisez Invoke-WebRequest natif de PowerShell ou node-fetch / Node.js fetch() pour les appels d'API ; préférez fetch() pour REST sauf si l'outil diffère.
  • Utilisez scripts/browser_pdf_downloader.mjs pour télécharger un PDF à partir du contexte de navigateur authentifié ; ne passez pas par le shell sauf si la ressource est clairement publique et que le contenu est vérifié.
  • Attendez que le PDF soit rendu dans la visionneuse PDF du navigateur ; ensuite, récupérez les octets du PDF via CDP JavaScript.
  • Vérifiez le PDF téléchargé : commencez par %PDF- (ou %!PS- pour PostScript). Signalez si une page HTML a été sauvegardée à la place.
  • Si Summon ou le site de l'éditeur est lent, ne déclarez pas d'échec prématurément. Une nouvelle tentative après que l'utilisateur a vérifié manuellement est souvent le bon plan.

Sécurité et limites

  • Cette compétence ne doit pas contourner les contrôles d'accès. Son objectif est d'automatiser le flux pour un utilisateur autorisé via le navigateur déjà authentifié.
  • Les téléchargements par lots doivent rester dans les limites recommandées ci-dessus.
  • N'essayez pas de résoudre les CAPTCHA, OTP, Cloudflare ou autres défis automatiquement. Ceux-ci doivent être gérés manuellement par l'utilisateur.

Skills associés