ZJU Literature Downloader
Esta habilidade transforma o fluxo de trabalho verificado em um processo repetível e legal para encontrar, baixar e ler artigos através do acesso do usuário à Biblioteca da Universidade de Zhejiang / WebVPN.
Limites
Use apenas o acesso institucional legítimo do usuário. Não burle paywalls, DRM, CAPTCHA, Cloudflare, verificações de bots de editoras ou autenticação de dois fatores. Se uma página solicitar CAPTCHA, login QR, SMS/OTP, Cloudflare, verificação de bot ou um desafio de segurança, pare e peça ao usuário para completá-lo no Chrome.
Evite downloads em massa. Trabalhe em pequenos lotes, de preferência após o usuário confirmar a lista de artigos. Deixe um rastro de auditoria claro do que foi baixado, de onde, e se informações de suporte foram encontradas.
Não peça ao usuário para colar senhas institucionais, credenciais CAS, códigos OTP, códigos de recuperação ou tokens de sessão no chat ou terminal. Se o usuário oferecer uma senha, recuse e use o fluxo de trabalho de login manual.
Exceção para páginas de login salvo do ZJU CAS: se o usuário disser explicitamente que o Chrome já preencheu as credenciais do ZJU CAS e autorizar o clique no botão de login/confirmação, o agente pode clicar nesse botão uma vez na página ZJU CAS/WebVPN/SSO institucional sem ler, copiar ou digitar qualquer credencial. Esta exceção não se aplica a CAPTCHA, login QR, SMS/OTP, verificações de bots de editoras ou qualquer página fora do fluxo de login institucional esperado.
Não inspecione ou exporte cookies, senhas, armazenamento local, perfis de navegador ou arquivos de sessão. Use apenas o contexto de página já autenticado do navegador.
Pré-condições
Antes de tentar downloads, confirme estas condições:
- O Chrome está aberto na máquina do usuário.
- O usuário fez login pessoalmente na Biblioteca da Universidade de Zhejiang / WebVPN no Chrome.
- Páginas comuns:
https://libweb.zju.edu.cn/,https://webvpn.zju.edu.cn/,https://zju.summon.serialssolutions.com/.
- Páginas comuns:
- A depuração remota do Chrome está permitida para a instância atual do navegador.
- Peça ao usuário para abrir
chrome://inspect/#remote-debugging. - Eles devem ativar
Allow remote debugging for this browser instance.
- Peça ao usuário para abrir
- O ambiente pode executar Node.js 22+.
- Tente
node --version. - Se
nodenão estiver no PATH no Codex Desktop, tente%LOCALAPPDATA%\OpenAI\Codex\bin\node.exe.
- Tente
- O proxy CDP de acesso web está disponível ou pode ser iniciado.
- Caminho típico do Claude Code:
%USERPROFILE%\.claude\skills\web-access-main\scripts\check-deps.mjs. - Caminho típico de agente compartilhado:
%USERPROFILE%\.agents\skills\web-access-main\scripts\check-deps.mjs. - Em configurações apenas com Codex, verifique também
%USERPROFILE%\.codex\skills\web-access-main\scripts\check-deps.mjs.
- Caminho típico do Claude Code:
- O usuário aprovou a pasta de saída de destino.
Se o Claude Code disser que esta habilidade não está instalada, instale ou copie para:
$env:USERPROFILE\.claude\skills\zju-literature-downloader
Configurações do Codex e outros agentes podem usar .codex\skills ou .agents\skills; trate os três locais como destinos de instalação, não como versões diferentes da habilidade.
Escopo do Lote
Lotes pequenos são suportados quando o usuário fornece uma lista definida de DOI/título/PMID.
Limites recomendados:
- lote normal: 5-10 artigos
- lote prático superior: 15-20 artigos, com pausas e um manifesto
- pare imediatamente se aparecerem verificações de editora, CAPTCHA, expiração do WebVPN ou prompts de download incomuns
Não transforme uma pesquisa ampla por palavra-chave em download automático ilimitado. Não baixe números inteiros de periódicos, volumes ou grandes conjuntos de resultados.
Categorias de Status
Classifique cada artigo em um destes status e mantenha o status no manifesto:
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 quando o navegador estiver visivelmente na página CAS / autenticação unificada de identidade da Universidade de Zhejiang. Use institutional_login_waiting_user quando o artigo ainda estiver em um seletor de instituição, handoff CARSI/Shibboleth/OpenAthens ou etapa SSO equivalente antes do CAS. Ambos são estados não finais; mantenha cas_waiting_user para compatibilidade retroativa de manifestos.
Use si_only_downloaded quando um ou mais arquivos oficiais de informações de suporte foram verificados, mas o PDF do artigo principal permanece indisponível através do acesso autorizado do usuário. Não chame isso de downloaded.
Use summon_unreachable quando o SPA do Summon repetidamente retorna ERR_EMPTY_RESPONSE ou não pode carregar após uma única nova tentativa. Use browser_pdf_viewer_fallback_needed quando o Chrome exibe visivelmente o PDF, mas o fetch() no contexto do navegador não consegue recuperar seus bytes. Nenhum status significa que o artigo está indisponível; ambos especificam a próxima alternativa legítima.
Use publisher_verification_waiting_user ou sciencedirect_robot_check quando uma página da editora mostrar "Você é um robô?", CAPTCHA, Cloudflare, verificação de bot ou outro desafio antiautomação. Não trate isso como uma falha final, mas também não tente resolvê-lo automaticamente.
Iniciar Controle do Chrome
Use o proxy CDP de acesso web quando disponível.
No 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
Em seguida, teste:
Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:3456/targets" -TimeoutSec 10
Se isso travar ou falhar:
- Peça ao usuário para confirmar a caixa de seleção de depuração remota.
- Verifique
%TEMP%\cdp-proxy.log. - Não tente ler arquivos de sessão do Chrome.
API Principal do Proxy CDP
O proxy de acesso web usual é http://127.0.0.1:3456.
| Endpoint | Método | Finalidade |
|---|---|---|
/health | GET | Saúde do proxy e status da conexão com o Chrome |
/targets | GET | Listar abas abertas do Chrome |
/new?url=... | GET | Criar uma nova aba em segundo plano |
/navigate?target=...&url=... | GET | Navegar uma aba existente |
/close?target=... | GET | Fechar uma aba |
/info?target=... | GET | Obter título, URL e readyState da página |
/eval?target=... | POST body=JS | Executar JavaScript em uma aba e retornar { value: ... } |
/clickAt?target=... | POST body=Seletor CSS | Clicar no centro de um elemento visível |
Use /navigate em vez de /new para URLs do Summon que contenham fragmentos #!. Se um fragmento #! for removido, o Chrome pode abrir about:blank ou uma página errada. Se curl não estiver disponível, use o PowerShell Invoke-WebRequest para verificações simples ou fetch() do Node.js para chamadas de proxy.
Fluxo de Trabalho de Pesquisa Recomendado
Prefira a rota de descoberta da biblioteca antes das páginas diretas da editora. É mais estável e menos propensa a acionar proteção contra bots.
- Pesquise por DOI ou título exato no ZJU Summon:
https://zju.summon.serialssolutions.com/search?#!/search?pn=1&ho=t&include.ft.matches=f&l=en&q=<DOI ou título codificado em URL>
- Abra URLs do Summon através de
scripts/cdp_open_url.mjsou codifique completamente a URL aninhada ao chamar o proxy CDP. O Summon usa#!; se o fragmento#for removido, o Chrome pode abrirabout:blankou a página errada. - Leia a página de resultados com
/eval. - Extraia links cujo texto visível ou
aria-labelseja:PDF在线全文Full TextView PDF- entradas de texto completo específicas da editora.
- Prefira o link
PDFdo resultado quando presente. - Abra o link do PDF em uma nova aba em segundo plano através do proxy CDP.
- Se a editora mostrar um desafio de segurança, peça ao usuário para completá-lo manualmente.
- Uma vez que o PDF esteja visível no Chrome, use
scripts/browser_pdf_downloader.mjspara salvá-lo do contexto autenticado do navegador.
Notas de Campo do Summon
Ao extrair links PDF, texto completo online ou links de editora do Summon:
- Pule valores
hrefvazios. A primeira correspondência de texto completo online pode ser um alternador de faceta, não um link real. - Trate o Summon como um SPA lento: aguarde cerca de 6 segundos após a navegação, depois repita a extração de links até 3 vezes com pequenas pausas.
- Se o Summon redirecionar para
login.serialssolutions.com/sso/logine disser que o IP está fora do intervalo autorizado, registreip_not_authorized. Nesse caso, o usuário pode precisar do cliente RVPN/SSLVPN da ZJU, não apenas do WebVPN em uma página do navegador, porque as abas do Chrome controladas pelo CDP ainda podem usar o IP da rede local. - Se o Summon não tiver PDF, mas tiver um link de texto completo online, siga essa rota antes de construir manualmente uma URL da editora.
- Se a página mostrar consistentemente
ERR_EMPTY_RESPONSEou falhar ao renderizar após uma nova navegação e as esperas normais do SPA, registresummon_unreachable. Não faça loop no Summon: tente a página de aterrissagem da editora do DOI ou uma rota OA confirmada uma vez, ainda usando a sessão de navegador autorizada do usuário quando necessário.
Padrões Específicos de Editora
Use estes como dicas de reparo baseadas em DOI somente após confirmar a identidade do artigo. Não reivindique acesso se a página ou PDF não for realmente verificado.
ACS Publications
Para prefixo DOI 10.1021/...:
https://pubs.acs.org/doi/pdf/<doi>
As informações de suporte da ACS geralmente seguem:
https://pubs.acs.org/doi/suppl/<doi>/suppl_file/<journal-code>_si_001.pdf
O exemplo verificado 10.1021/acs.biomac.4c00102 usou bm4c00102_si_001.pdf.
Comece pela página de aterrissagem do artigo da ACS sempre que possível. Um breve interstício chinês 请稍候... pode desaparecer por si só; aguarde cerca de 5-10 segundos e inspecione a página uma vez antes de classificá-la como um desafio da editora. Uma página de resumo legível não prova que o PDF principal está autorizado: se ainda mostrar Available to Purchase ou Access through Institution, registre o status de login institucional ou compra apropriado e deixe qualquer seleção de login para o usuário.
Links de informações de suporte da ACS mostrados na página do artigo podem legitimamente levar a downloads do ACS Figshare / ndownloader.figstatic.com mesmo quando o PDF principal não está autorizado. Siga links oficiais visíveis, verifique o PDF SI resultante e registre si_only_downloaded até que o artigo principal também seja verificado. Não adivinhe um nome de arquivo suplementar além de um link da página do artigo e não trate SI acessível como permissão para recuperar o artigo principal atrás do paywall.
Wiley
Para prefixos DOI como 10.1002/... ou 10.1111/..., primeiro navegue até a página do artigo autenticado da Wiley, depois busque a partir da própria origem dessa página:
<location.origin>/doi/pdfdirect/<doi>?download=true
Não codifique onlinelibrary.wiley.com diretamente: o Summon pode autenticar através de um subdomínio como advanced.onlinelibrary.wiley.com, e buscas entre origens podem falhar. Evite também navegar na aba diretamente para pdfdirect, porque o navegador pode iniciar um download e deixar o contexto da página inutilizável. Prefira fetch() no contexto da página.
Springer Nature
Para prefixos DOI como 10.1007/... e 10.1186/...:
https://link.springer.com/content/pdf/<doi>.pdf
Isso geralmente funciona após o login institucional ser resolvido. Use fetch no contexto do navegador se o download direto do shell retornar 401, 403 ou uma página de login HTML.
Nature Communications
Para padrões DOI OA como 10.1038/s41467-..., tente:
https://www.nature.com/articles/<article-id>.pdf
Extraia <article-id> do sufixo DOI e ainda verifique o cabeçalho e o texto do PDF.
bioRxiv
Para prefixo DOI 10.1101/..., tente:
https://www.biorxiv.org/content/<doi>v1.full.pdf
Se a versão 1 retornar 404, tente a página do artigo ou uma versão posterior. Verifique se o título corresponde.
Frontiers
Para prefixo DOI 10.3389/..., tente:
https://www.frontiersin.org/articles/<doi>/pdf
Se falhar, abra a página do artigo primeiro e use seu link PDF visível.
RSC Publishing
Para prefixo DOI 10.1039/..., não presuma que a ZJU tem acesso autorizado ao texto completo. Se os links PDF retornarem 404 ou páginas de compra, inspecione a página do artigo e registre no_authorized_pdf_found ou purchase_required em vez de repetir agressivamente.
Verificação da Editora e ScienceDirect
O ScienceDirect e algumas plataformas de editoras podem mostrar "Você é um robô?", CAPTCHA, Cloudflare, verificação de bot ou verificações semelhantes após navegação repetida direta de DOI ou abertura automática de abas. Essas páginas são desafios de segurança e antiautomação, não confirmações de login comuns.
Reduza a chance de acioná-los usando um padrão de acesso conservador:
- Prefira links do ZJU Summon / WebVPN / biblioteca
在线全文antes da navegação diretadoi.org -> editora. - Processe o ScienceDirect e outras editoras sensíveis um artigo de cada vez.
- Mantenha um rastro de auditoria visível no manifesto; não abra muitas abas de editora em paralelo.
- Aguarde cada página estabilizar antes de procurar por
Download PDF,View PDFouPDF. - Reutilize a mesma aba após o usuário completar uma etapa de verificação em vez de abrir novas abas repetidamente.
- Evite loops de repetição. Uma tentativa automática falha é suficiente antes de passar a página para o usuário.
Quando uma página de verificação da editora aparecer:
- Pare ações automatizadas nessa aba.
- Registre o artigo em
publisher_verification.tsvou no manifesto principal com o statuspublisher_verification_waiting_user; usesciencedirect_robot_checkpara a página "Você é um robô?" do ScienceDirect. - Informe ao usuário qual artigo e aba precisam de atenção manual.
- Não clique em CAPTCHA, Cloudflare, "Você é um robô?", verificação de bot ou controles de desafio semelhantes automaticamente.
- Após o usuário dizer que a verificação foi concluída, inspecione a aba novamente antes de continuar.
Baixar o PDF
Use o contexto de página autenticada do navegador para baixar. O script recomendado está em scripts/browser_pdf_downloader.mjs. Ele recebe um targetId e um caminho de saída, e usa o contexto CDP para recuperar os bytes do PDF exibido no Chrome.
Se a página mostrar uma visualização de PDF embutida (chrome-extension://... ou blob:), primeiro navegue para a URL PDF real ou extraia do cabeçalho Content-Disposition.
Informações de Suporte
Após o download do PDF principal, procure por informações de suporte:
- Na página do artigo: links visíveis com texto contendo
Supporting Information,Supplementary Material,Appendix A, etc. - Na página de download da editora: links para materiais suplementares.
- Em páginas de periódicos chineses: seções de apêndice ou materiais complementares.
Baixe arquivos de informações de suporte na mesma pasta do artigo principal. Anexe um sufixo como _si, _suppl ou o nome do arquivo original ao nome do arquivo base.
Fluxo de Trabalho do Manifesto
Mantenha um manifesto de todos os artigos processados. O formato sugerido é TSV ou uma estrutura de dados interna com estes campos:
id: Identificador único (DOI, PMID, etc.)title: Título do artigostatus: Categoria de status da lista acimaurls_tried: URLs tentadaspdf_path: Caminho local do PDF, se baixadosi_paths: Caminhos locais das informações de suporte, se baixadaserror: Mensagem de erro, se houvertimestamp: Carimbo de data/hora da última ação
Use o manifesto para:
- rastrear o progresso
- evitar tentativas duplicadas
- fornecer um relatório claro ao usuário
Tratamento de Erros
Erros de Rede
ERR_EMPTY_RESPONSE: Espere 10 segundos e tente novamente uma vez. Se persistir, registre o status apropriado.ERR_CONNECTION_RESET: Verifique a conexão WebVPN. Se o WebVPN expirou, informe o usuário.ERR_NAME_NOT_RESOLVED: Verifique a URL e a conectividade de rede.
Desafios de Login
- Página CAS: registre
cas_waiting_user, informe o usuário. - Seletor de instituição: registre
institutional_login_waiting_user, informe o usuário. - Expirado: se uma sessão expirar durante o processamento, pare e peça ao usuário para renovar o login.
Bloqueios da Editora
- Desafio de bot: registre o status de verificação, não tente novamente automaticamente.
- Bloqueio de IP: registre
ip_not_authorized, sugira usar RVPN/SSLVPN. - Paywall: registre
purchase_requiredouno_authorized_pdf_found.
Erros Inesperados
- Falha no proxy CDP: verifique
%TEMP%\cdp-proxy.log, peça ao usuário para reiniciar o Chrome com a depuração remota. - Script ausente: verifique os caminhos de instalação, copie a habilidade se necessário.
- PDF corrompido: verifique o cabeçalho mágico do PDF (
%PDF-), tente baixar novamente do contexto do navegador.
Exemplo de Fluxo de Trabalho Completo
- Entrada do Usuário: "Baixe o artigo 10.1021/acs.biomac.4c00102"
- Verificar Pré-condições: Chrome aberto, WebVPN logado, depuração remota ativada, Node.js instalado, proxy CDP em execução.
- Pesquisar no Summon: Abra a URL de pesquisa do Summon para o DOI.
- Extrair Link PDF: Encontre o link
PDFou在线全文nos resultados. - Navegar para o PDF: Abra o link em uma nova aba.
- Verificar Autenticação: Se a página da editora mostrar um desafio, registre o status e informe o usuário.
- Baixar PDF: Use o contexto de página CDP para baixar os bytes do PDF.
- Verificar PDF: Confirme que o PDF é um PDF válido (cabeçalho
%PDF-). - Baixar Informações de Suporte: Verifique se há links de materiais suplementares e baixe-os.
- Atualizar Manifesto: Registre o artigo com status
downloadedoudownloaded_with_si. - Relatório ao Usuário: Forneça um resumo do que foi baixado e onde está salvo.
Licença e Conformidade
Esta habilidade é apenas para fins educacionais e de pesquisa legítimos através de acesso institucional autorizado. Use de acordo com os termos de serviço da Biblioteca da Universidade de Zhejiang e de todas as editoras envolvidas. O autor não é responsável pelo uso indevido.