Communitygithub.com

baihe26/zju-literature-downloader

Use esta habilidade sempre que o usuário quiser usar sua própria sessão logada da Biblioteca da Universidade de Zhejiang, WebVPN, CAS SSO, 求是学术搜索, Summon, ScienceDirect, editora ou Chrome para pesquisar, baixar, organizar, repetir e ler PDFs acadêmicos e informações de suporte de forma legal. Acione com solicitações como “用浙大图书馆下载文献”, “WebVPN 下载 PDF”, “CAS 认证失败后重试下载”, “ScienceDirect 人机验证后继续”, “自动下载补充材料”, “读取全文和 supporting information”, “批量整理文献到项目文件夹” ou “导入 Zotero 后帮我读全文”.

O que é zju-literature-downloader?

Esta habilidade transforma o fluxo de trabalho verificado de um usuário logado na Universidade de Zhejiang em um processo repetível e legal para encontrar, baixar e ler artigos acadêmicos. Ela é útil para pesquisadores que precisam acessar artigos pagos através de sua assinatura institucional, evitando violações de paywalls ou DRM. A habilidade suporta plataformas como Claude Code, Cursor e Codex no Windows, utilizando o Chrome do usuário com autenticação prévia e um proxy CDP para controlar o navegador. O processo inclui busca no Summon, navegação em páginas de editores como ACS, Wiley e Springer Nature, download de PDFs e materiais suplementares, e classificação de cada artigo em status como 'download bem-sucedido', 'esperando verificação do usuário' ou 'falha após tentativa', garantindo um rastro de auditoria claro e evitando downloads em massa ou tentativas de contornar desafios de segurança.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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:

  1. O Chrome está aberto na máquina do usuário.
  2. 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/.
  3. 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.
  4. O ambiente pode executar Node.js 22+.
    • Tente node --version.
    • Se node não estiver no PATH no Codex Desktop, tente %LOCALAPPDATA%\OpenAI\Codex\bin\node.exe.
  5. 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.
  6. 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.

EndpointMétodoFinalidade
/healthGETSaúde do proxy e status da conexão com o Chrome
/targetsGETListar abas abertas do Chrome
/new?url=...GETCriar uma nova aba em segundo plano
/navigate?target=...&url=...GETNavegar uma aba existente
/close?target=...GETFechar uma aba
/info?target=...GETObter título, URL e readyState da página
/eval?target=...POST body=JSExecutar JavaScript em uma aba e retornar { value: ... }
/clickAt?target=...POST body=Seletor CSSClicar 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.

  1. 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>
  2. Abra URLs do Summon através de scripts/cdp_open_url.mjs ou codifique completamente a URL aninhada ao chamar o proxy CDP. O Summon usa #!; se o fragmento # for removido, o Chrome pode abrir about:blank ou a página errada.
  3. Leia a página de resultados com /eval.
  4. Extraia links cujo texto visível ou aria-label seja:
    • PDF
    • 在线全文
    • Full Text
    • View PDF
    • entradas de texto completo específicas da editora.
  5. Prefira o link PDF do resultado quando presente.
  6. Abra o link do PDF em uma nova aba em segundo plano através do proxy CDP.
  7. Se a editora mostrar um desafio de segurança, peça ao usuário para completá-lo manualmente.
  8. Uma vez que o PDF esteja visível no Chrome, use scripts/browser_pdf_downloader.mjs para 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:

  1. Pule valores href vazios. A primeira correspondência de texto completo online pode ser um alternador de faceta, não um link real.
  2. 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.
  3. Se o Summon redirecionar para login.serialssolutions.com/sso/login e disser que o IP está fora do intervalo autorizado, registre ip_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.
  4. 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.
  5. Se a página mostrar consistentemente ERR_EMPTY_RESPONSE ou falhar ao renderizar após uma nova navegação e as esperas normais do SPA, registre summon_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:

  1. Prefira links do ZJU Summon / WebVPN / biblioteca 在线全文 antes da navegação direta doi.org -> editora.
  2. Processe o ScienceDirect e outras editoras sensíveis um artigo de cada vez.
  3. Mantenha um rastro de auditoria visível no manifesto; não abra muitas abas de editora em paralelo.
  4. Aguarde cada página estabilizar antes de procurar por Download PDF, View PDF ou PDF.
  5. Reutilize a mesma aba após o usuário completar uma etapa de verificação em vez de abrir novas abas repetidamente.
  6. 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:

  1. Pare ações automatizadas nessa aba.
  2. Registre o artigo em publisher_verification.tsv ou no manifesto principal com o status publisher_verification_waiting_user; use sciencedirect_robot_check para a página "Você é um robô?" do ScienceDirect.
  3. Informe ao usuário qual artigo e aba precisam de atenção manual.
  4. Não clique em CAPTCHA, Cloudflare, "Você é um robô?", verificação de bot ou controles de desafio semelhantes automaticamente.
  5. 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:

  1. Na página do artigo: links visíveis com texto contendo Supporting Information, Supplementary Material, Appendix A, etc.
  2. Na página de download da editora: links para materiais suplementares.
  3. 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 artigo
  • status: Categoria de status da lista acima
  • urls_tried: URLs tentadas
  • pdf_path: Caminho local do PDF, se baixado
  • si_paths: Caminhos locais das informações de suporte, se baixadas
  • error: Mensagem de erro, se houver
  • timestamp: 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_required ou no_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

  1. Entrada do Usuário: "Baixe o artigo 10.1021/acs.biomac.4c00102"
  2. Verificar Pré-condições: Chrome aberto, WebVPN logado, depuração remota ativada, Node.js instalado, proxy CDP em execução.
  3. Pesquisar no Summon: Abra a URL de pesquisa do Summon para o DOI.
  4. Extrair Link PDF: Encontre o link PDF ou 在线全文 nos resultados.
  5. Navegar para o PDF: Abra o link em uma nova aba.
  6. Verificar Autenticação: Se a página da editora mostrar um desafio, registre o status e informe o usuário.
  7. Baixar PDF: Use o contexto de página CDP para baixar os bytes do PDF.
  8. Verificar PDF: Confirme que o PDF é um PDF válido (cabeçalho %PDF-).
  9. Baixar Informações de Suporte: Verifique se há links de materiais suplementares e baixe-os.
  10. Atualizar Manifesto: Registre o artigo com status downloaded ou downloaded_with_si.
  11. 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.

Habilidades Relacionadas