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 :
- Chrome est ouvert sur la machine de l'utilisateur.
- 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/.
- Pages courantes :
- 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.
- Demandez à l'utilisateur d'ouvrir
- L'environnement peut exécuter Node.js 22+.
- Essayez
node --version. - Si
noden'est pas dans PATH dans Codex Desktop, essayez%LOCALAPPDATA%\OpenAI\Codex\bin\node.exe.
- Essayez
- 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.
- Chemin typique pour Claude Code :
- 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 terminaison | Méthode | Objectif |
|---|---|---|
/health | GET | État du proxy et connexion Chrome |
/targets | GET | Lister les onglets Chrome ouverts |
/new?url=... | GET | Créer un nouvel onglet en arrière-plan |
/navigate?target=...&url=... | GET | Naviguer dans un onglet existant |
/close?target=... | GET | Fermer un onglet |
/info?target=... | GET | Obtenir le titre, l'URL et readyState de la page |
/eval?target=... | POST body=JS | Exécuter du JavaScript dans un onglet et retourner { value: ... } |
/clickAt?target=... | POST body=sélecteur CSS | Cliquer 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.
- 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>
- Ouvrez les URL Summon via
scripts/cdp_open_url.mjsou encodez complètement l'URL imbriquée lors de l'appel au proxy CDP. Summon utilise#!; si le fragment#est supprimé, Chrome peut ouvrirabout:blankou la mauvaise page. - Lisez la page de résultats avec
/eval. - Extrayez les liens dont le texte visible ou
aria-labelest :PDF在线全文Full TextView PDF- entrées de texte intégral spécifiques à l'éditeur.
- Préférez le lien
PDFdu résultat lorsqu'il est présent. - Ouvrez le lien PDF dans un nouvel onglet en arrière-plan via le proxy CDP.
- Si l'éditeur affiche un défi de sécurité, demandez à l'utilisateur de le compléter manuellement.
- Une fois le PDF visible dans Chrome, utilisez
scripts/browser_pdf_downloader.mjspour 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 :
- Ignorez les valeurs
hrefvides. La première correspondance de texte intégral en ligne peut être un bouton de facette plutôt qu'un vrai lien. - 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.
- Si Summon redirige vers
login.serialssolutions.com/sso/loginet indique que l'IP est en dehors de la plage autorisée, enregistrezip_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. - 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.
- Si la page affiche systématiquement
ERR_EMPTY_RESPONSEou ne parvient pas à s'afficher après une nouvelle navigation fraîche et les attentes normales du SPA, enregistrezsummon_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 :
- Préférez les liens ZJU Summon / WebVPN / bibliothèque
在线全文avant la navigation directedoi.org -> éditeur. - Traitez ScienceDirect et autres éditeurs sensibles un article à la fois.
- Conservez une trace d'audit visible dans le manifeste ; n'ouvrez pas de nombreux onglets d'éditeurs en parallèle.
- Attendez que chaque page se stabilise avant de chercher
Download PDF,View PDF, ouPDF. - 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.
- É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 :
- Arrêtez les actions automatisées sur cet onglet.
- Enregistrez l'article dans
publisher_verification.tsvou le manifeste principal avec le statutpublisher_verification_waiting_user; utilisezsciencedirect_robot_checkpour la page "Are you a robot?" de ScienceDirect. - Dites à l'utilisateur quel article et quel onglet nécessitent une attention manuelle.
- Ne cliquez pas automatiquement sur CAPTCHA, Cloudflare, "Are you a robot?", vérification de bot ou des contrôles de défi similaires.
- 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 :
| Champ | Objectif |
|---|---|
status | Catégorie de statut |
doi | DOI de l'article, si disponible |
title | Titre tel que trouvé |
url | URL de la page de l'article |
pdf_url | URL du PDF réel téléchargé |
publisher | Éditeur ou plateforme |
si_found | Booléen, informations supplémentaires trouvées |
downloaded_at | Horodatage |
notes | Texte 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-WebRequestnatif de PowerShell ounode-fetch/ Node.jsfetch()pour les appels d'API ; préférezfetch()pour REST sauf si l'outil diffère. - Utilisez
scripts/browser_pdf_downloader.mjspour 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.