Communitygithub.com

baihe26/zju-literature-downloader

ユーザーの浙江大学図書館、WebVPN、CAS SSO、求是学術検索、Summon、ScienceDirect、出版社、Chromeセッションを使って、学術PDFや補足情報を合法的に検索、ダウンロード、整理、再試行、閲覧するためのスキルです。

zju-literature-downloader とは?

このスキルは、浙江大学の学生や研究者が、自身の機関アクセス権限(浙江大学図書館、WebVPN、CAS SSO)を活用して、学術文献を合法的かつ効率的にダウンロードするためのワークフローを提供します。主な機能は、DOIやタイトルからの論文検索、PDFのダウンロード、補足資料(Supporting Information)の自動取得、ダウンロード状況の管理(マニフェストファイルによるステータス追跡)です。Claude Code、Codex、CursorなどのAIエージェント上で動作し、Chromeのリモートデバッグ機能(CDP)を介してユーザーがすでにログイン済みのブラウザセッションを操作します。このスキルは、CAPTCHAやCloudflareなどの自動化防止対策をバイパスせず、ユーザーの手動介入が必要な場合には適切に通知する設計になっており、機関の利用規定を遵守したダウンロードを支援します。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ZJU Literature Downloader(浙江大学文献ダウンローダー)

このスキルは、ユーザーの浙江大学図書館/WebVPNアクセスを利用して、論文の検索、ダウンロード、および閲覧を、検証済みのワークフローに基づいて繰り返し実行可能かつ合法的な範囲で行えるようにします。

制限事項

ユーザーの正当な機関アクセスのみを使用してください。ペイウォール、DRM、CAPTCHA、Cloudflare、出版社のボット対策、または二要素認証を回避しないでください。ページでCAPTCHA、QRログイン、SMS/OTP、Cloudflare、出版社のボット対策、またはセキュリティチャレンジが要求された場合は、停止し、ユーザーにChrome上で完了するよう依頼してください。

大量ダウンロードは避けてください。小規模なバッチで作業し、できればユーザーが論文リストを確認した後に行ってください。何が、どこから、補足情報が見つかったかどうかの明確な監査証跡を残してください。

ユーザーに、機関のパスワード、CAS認証情報、OTPコード、リカバリーコード、またはセッショントークンをチャットやターミナルに貼り付けさせないでください。ユーザーがパスワードを提供しようとした場合は、辞退し、代わりにハンドオフログインワークフローを使用してください。

ZJU CASの保存ログインページの例外:ユーザーが、ChromeがすでにZJU CAS認証情報を入力済みであり、ログイン/確認ボタンをクリックすることを明示的に許可した場合、エージェントはそのボタンを1回クリックしてもかまいません。その際、認証情報の読み取り、コピー、入力は行いません。この例外は、CAPTCHA、QRログイン、SMS/OTP、出版社のボット対策、または想定される機関ログインフロー以外のページには適用されません。

Cookie、パスワード、ローカルストレージ、ブラウザプロファイル、またはセッションファイルの検査やエクスポートは行わないでください。ブラウザの認証済みページコンテキストのみを使用してください。

前提条件

ダウンロードを試みる前に、以下の条件を確認してください。

  1. ユーザーのマシンでChromeが開いていること。
  2. ユーザーがChromeで浙江大学図書館/WebVPNに個人ログインしていること。
    • 一般的なページ:https://libweb.zju.edu.cn/、https://webvpn.zju.edu.cn/、https://zju.summon.serialssolutions.com/。
  3. 現在のブラウザインスタンスに対してChromeリモートデバッグが許可されていること。
    • ユーザーに chrome://inspect/#remote-debugging を開くよう依頼してください。
    • 「このブラウザインスタンスに対してリモートデバッグを許可する」を有効にする必要があります。
  4. 環境がNode.js 22+を実行できること。
    • node --version を試してください。
    • Codex DesktopでnodeがPATHにない場合は、%LOCALAPPDATA%\OpenAI\Codex\bin\node.exe を試してください。
  5. Webアクセス用CDPプロキシが利用可能であるか、起動できること。
    • 典型的なClaude Codeパス:%USERPROFILE%\.claude\skills\web-access-main\scripts\check-deps.mjs。
    • 典型的な共有エージェントパス:%USERPROFILE%\.agents\skills\web-access-main\scripts\check-deps.mjs。
    • Codexのみのセットアップでは、%USERPROFILE%\.codex\skills\web-access-main\scripts\check-deps.mjs も確認してください。
  6. ユーザーが出力先フォルダを承認していること。

Claude Codeがこのスキルがインストールされていないと言う場合は、以下にインストールまたはコピーしてください。

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

Codexやその他のエージェントセットアップでは、代わりに .codex\skills または .agents\skills を使用する場合があります。これらの3つの場所をインストール先として扱い、異なるスキルバージョンとしては扱わないでください。

バッチ範囲

ユーザーが明確なDOI/タイトル/PMIDリストを提供する場合、小規模なバッチがサポートされます。

推奨制限:

  • 通常のバッチ:5~10件
  • 実用的な上限バッチ:15~20件(一時停止とマニフェスト付き)
  • 出版社チェック、CAPTCHA、WebVPNの有効期限切れ、または異常なダウンロードプロンプトが表示された場合は直ちに停止する

広範なキーワード検索を無制限の自動ダウンロードに変えないでください。ジャーナルの号、巻、または大量の結果セットをダウンロードしないでください。

ステータスカテゴリ

各論文を以下のいずれかのステータスに分類し、マニフェストにステータスを保持してください。

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

ブラウザが浙江大学CAS /統一身份認証のページを表示している場合は、cas_waiting_user を使用してください。論文がまだ機関セレクタ、CARSI/Shibboleth/OpenAthensのハンドオフ、またはCAS前の同等のSSOステップにある場合は、institutional_login_waiting_user を使用してください。どちらも最終状態ではありません。後方互換性のあるマニフェストのために cas_waiting_user を維持してください。

1つ以上の公式の補足情報ファイルが検証されたが、ユーザーの認証されたアクセスを通じてメインの論文PDFが利用できない場合は、si_only_downloaded を使用してください。これを downloaded と呼んではいけません。

Summon SPAが繰り返し ERR_EMPTY_RESPONSE を返すか、1回の新しい再試行後にロードできない場合は、summon_unreachable を使用してください。ChromeがPDFを表示しているが、ブラウザコンテキストの fetch() がそのバイト数を取得できない場合は、browser_pdf_viewer_fallback_needed を使用してください。どちらのステータスも論文が利用できないことを意味するものではなく、次の正当なフォールバック方法を指定するものです。

出版社ページに「Are you a robot?」、CAPTCHA、Cloudflare、ボット検証、またはその他の自動化防止チャレンジが表示されている場合は、publisher_verification_waiting_user または sciencedirect_robot_check を使用してください。これは最終的な失敗として扱わないでください。ただし、自動的に解決しようとしないでください。

Chrome制御の開始

可能であれば、Webアクセス用CDPプロキシを使用してください。

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

次にテストします:

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

これがハングアップするか失敗する場合:

  • リモートデバッグチェックボックスがオンになっていることをユーザーに確認してください。
  • %TEMP%\cdp-proxy.log を確認してください。
  • Chromeセッションファイルの読み取りを試みないでください。

コアCDPプロキシAPI

通常のWebアクセスプロキシは http://127.0.0.1:3456 です。

エンドポイントメソッド目的
/healthGETプロキシの状態とChrome接続ステータス
/targetsGET開いているChromeタブの一覧表示
/new?url=...GET新しいバックグラウンドタブを作成
/navigate?target=...&url=...GET既存のタブを移動
/close?target=...GETタブを閉じる
/info?target=...GETページのタイトル、URL、readyStateを取得
/eval?target=...POST body=JSタブ内でJavaScriptを実行し、{ value: ... } を返す
/clickAt?target=...POST body=CSSセレクタ表示されている要素の中央をクリック

#! フラグメントを含むSummon URLには、/new ではなく /navigate を使用してください。#! フラグメントが削除されると、Chromeが about:blank または間違ったページを開く可能性があります。curl が利用できない場合は、簡単なチェックにはPowerShell Invoke-WebRequest を、プロキシ呼び出しにはNode.js fetch() を使用してください。

推奨検索ワークフロー

直接出版社のページにアクセスする前に、図書館発見ルートを優先してください。より安定しており、ボット対策を引き起こす可能性が低くなります。

  1. ZJU SummonでDOIまたは正確なタイトルを検索:
    • https://zju.summon.serialssolutions.com/search?#!/search?pn=1&ho=t&include.ft.matches=f&l=en&q=<URLエンコードされたDOIまたはタイトル>
  2. scripts/cdp_open_url.mjs などを使用してSummon URLを開くか、CDPプロキシを呼び出すときにネストされたURLを完全にURLエンコードしてください。Summonは #! を使用します。# フラグメントが削除されると、Chromeが about:blank または間違ったページを開く可能性があります。
  3. /eval で結果ページを読み取ります。
  4. 表示テキストまたは aria-label が以下のリンクを抽出します:
    • PDF
    • 在线全文
    • Full Text
    • View PDF
    • 出版社固有の全文エントリ。
  5. 可能であれば、結果の PDF リンクを優先します。
  6. CDPプロキシを介して新しいバックグラウンドタブでPDFリンクを開きます。
  7. 出版社がセキュリティチャレンジを表示した場合は、ユーザーに手動で完了するよう依頼します。
  8. ChromeでPDFが表示されたら、scripts/browser_pdf_downloader.mjs を使用して、認証されたブラウザコンテキストから保存します。

Summonフィールドノート

Summonから PDF、オンライン全文、または出版社リンクを抽出する場合:

  1. 空の href 値はスキップします。最初のオンライン全文一致は、実際のリンクではなくファセットトグルである可能性があります。
  2. Summonを遅いSPAとして扱います:ナビゲーション後約6秒待機し、短い一時停止を挟んでリンク抽出を最大3回再試行します。
  3. Summonが login.serialssolutions.com/sso/login にリダイレクトし、IPが許可範囲外であると表示した場合は、ip_not_authorized を記録します。その場合、ユーザーはブラウザページのWebVPNだけでなく、ZJU RVPN/SSLVPNクライアントが必要になる場合があります。これは、CDP制御下のChromeタブがローカルネットワークIPを引き続き使用する可能性があるためです。
  4. SummonにPDFがないがオンライン全文リンクがある場合は、出版社URLを手動で作成する前に、そのルートをたどります。
  5. ページが一貫して ERR_EMPTY_RESPONSE を表示するか、1回の新しいナビゲーションと通常のSPA待機後にレンダリングに失敗する場合は、summon_unreachable を記録します。Summonでループしないでください:DOIの出版社ランディングページまたは確認済みのOAルートを1回試し、必要な場合はユーザーの認証されたブラウザセッションを引き続き使用します。

出版社固有のパターン

論文の同一性を確認した後でのみ、DOIベースの修復ヒントとしてこれらを使用してください。ページまたはPDFが実際に検証されていない場合、アクセスを主張しないでください。

ACS Publications

DOIプレフィックス 10.1021/... の場合:

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

ACSの補足情報は、多くの場合次のようになります:

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

検証済みの例 10.1021/acs.biomac.4c00102 では bm4c00102_si_001.pdf が使用されました。

可能な限りACSの記事ランディングページから開始してください。短い中国語の 请稍候... インタースティシャルは自然に消える場合があります。約5〜10秒待機し、出版社チャレンジとして分類する前にページを1回検査してください。読み取り可能なアブストラクトページは、メインのPDFが認証されていることを証明しません。「Available to Purchase」または「Access through Institution」がまだ表示されている場合は、適切な機関ログインまたは購入ステータスを記録し、サインイン選択はユーザーに任せてください。

記事ページに表示されるACSの補足情報リンクは、メインのPDFが認証されていない場合でも、ACS Figshare/ndownloader.figstatic.com のダウンロードに正当につながる可能性があります。表示されている公式リンクをたどり、結果のSI PDFを検証し、メインの記事も検証されるまで si_only_downloaded を記録してください。記事ページのリンクを超えて補足ファイル名を推測したり、アクセス可能なSIを有料メイン論文を取得する許可として扱わないでください。

Wiley

10.1002/... や 10.1111/... などのDOIプレフィックスの場合、最初に認証されたWiley記事ページに移動し、そのページ自身のオリジンからフェッチします:

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

onlinelibrary.wiley.com をハードコードしないでください。Summonは advanced.onlinelibrary.wiley.com などのサブドメインを通じて認証する場合があり、クロスオリジンフェッチは失敗する可能性があります。また、タブを直接 pdfdirect に移動しないでください。ブラウザがダウンロードを開始し、ページコンテキストが使用できなくなる可能性があります。ページコンテキストの fetch() を優先してください。

Springer Nature

10.1007/... や 10.1186/... などのDOIプレフィックスの場合:

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

これは通常、機関ログインが解決された後に機能します。直接シェルダウンロードで 401、403、またはHTMLログインページが返される場合は、ブラウザコンテキストのfetchを使用してください。

Nature Communications

10.1038/s41467-... などのOA DOIパターンの場合、以下を試してください:

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

DOIサフィックスから <article-id> を抽出し、PDFヘッダーとテキストを引き続き検証してください。

bioRxiv

DOIプレフィックス 10.1101/... の場合、以下を試してください:

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

バージョン1が404を返す場合は、記事ページまたはそれ以降のバージョンを試してください。タイトルが一致することを確認してください。

Frontiers

DOIプレフィックス 10.3389/... の場合、以下を試してください:

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

失敗した場合は、最初に記事ページを開き、表示されているPDFリンクを使用してください。

RSC Publishing

DOIプレフィックス 10.1039/... の場合、ZJUが全文アクセスを認証していると想定しないでください。PDFリンクが404または購入ページを返す場合は、記事ページを検査し、積極的に再試行するのではなく、no_authorized_pdf_found または purchase_required を記録してください。

出版社検証とScienceDirect

ScienceDirectおよび一部の出版社プラットフォームは、直接のDOIナビゲーションや自動タブ開封を繰り返した後、「Are you a robot?」、CAPTCHA、Cloudflare、ボット検証、または同様のチェックを表示する場合があります。これらのページはセキュリティおよび自動化防止チャレンジであり、通常のログイン確認ではありません。

これらをトリガーする可能性を減らすために、控えめなアクセスパターンを使用してください:

  1. doi.org -> 出版社 に直接移動する前に、ZJU Summon/WebVPN/図書館の 在线全文 リンクを優先します。
  2. ScienceDirectやその他の機密性の高い出版社は、一度に1つの記事ずつ処理します。
  3. マニフェストに可視の監査証跡を残します。多くの出版社タブを並行して開かないでください。
  4. 各ページが落ち着くのを待ってから、「Download PDF」、「View PDF」、または「PDF」を探します。
  5. ユーザーが検証手順を完了した後、新しいタブを繰り返し開く代わりに、同じタブを再利用します。
  6. 再試行ループを避けてください。ページをユーザーに渡す前に、1回の自動試行で十分です。

出版社検証ページが表示された場合:

  1. そのタブでの自動アクションを停止します。
  2. publisher_verification.tsv またはメインマニフェストに、ステータス publisher_verification_waiting_user で論文を記録します。ScienceDirectの「Are you a robot?」ページには sciencedirect_robot_check を使用します。
  3. どの論文とタブが手動での対応を必要としているかをユーザーに伝えます。
  4. CAPTCHA、Cloudflare、「Are you a robot?」、ボットチェック、または同様のチャレンジコントロールを自動的にクリックしないでください。
  5. ユーザーが検証が完了したと言った後…

…[翻訳のため省略]

関連スキル