Communitygithub.com

浙大文獻下載器

當使用者希望透過已登入的浙江大學圖書館、WebVPN、CAS SSO、求是學術搜索、Summon、ScienceDirect、出版商或Chrome工作階段,合法搜尋、下載、整理、重試及閱讀學術PDF與補充資料時,使用此技能。觸發關鍵詞如「用浙大圖書館下載文獻」、「WebVPN 下載 PDF」、「CAS 認證失敗後重試下載」、「ScienceDirect 人機驗證後繼續」、「自動下載補充材料」、「讀取全文和 supporting information」、「批量整理文獻到專案資料夾」或「導入 Zotero 後幫我讀全文」。

浙大文獻下載器 是什麼?

此技能專為浙江大學的AI代理(如Claude Code、Codex、Cursor等)設計,將經過驗證的合法存取流程轉化為可重複的流程,用於尋找、下載和閱讀學術論文。它嚴格限定於使用者透過浙江大學圖書館、WebVPN、CAS SSO及求是學術搜索等管道取得的合法機構授權,明確禁止繞過付費牆、DRM、人機驗證或出版商機器人檢查。技能會自動利用Chrome遠端除錯工具與CDP代理來控制瀏覽器,透過浙江大學的Summon搜尋引擎優先查找論文,並根據結果提取PDF或全文連結進行下載。對於不同出版商(如ACS、Wiley、Springer Nature等),它提供了特定的DOI轉換模式以提升下載成功率,並能將每篇論文的結果狀態(如下載成功、需要使用者驗證、IP未授權等)記錄在清單中。當遇到出版商驗證或機器人檢查時,它會自動暫停並請求使用者手動完成,確保整個過程合規且可追溯。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add baihe26/zju-literature-downloader

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

ZJU Literature Downloader

此技能將經過驗證的工作流程轉變為可重複、合法範圍內的流程,用於透過使用者的浙江大學圖書館 / WebVPN 存取權限來尋找、下載和閱讀論文。

邊界

僅使用使用者的合法機構存取權限。請勿繞過付費牆、DRM、CAPTCHA、Cloudflare、出版商機器人檢查或雙因素驗證。如果頁面要求 CAPTCHA、QR 碼登入、簡訊/OTP、Cloudflare、出版商機器人檢查或安全挑戰,請停止並要求使用者在 Chrome 中完成。

避免大量下載。以小批量方式工作,最好在使用者確認論文清單後進行。留下清晰的稽核軌跡,記錄下載內容、來源以及是否找到補充資料。

請勿要求使用者在聊天或終端機中貼上機構密碼、CAS 憑證、OTP 碼、恢復碼或工作階段令牌。如果使用者提供密碼,請拒絕並改用交接登入工作流程。

ZJU CAS 已儲存登入頁面的例外情況:如果使用者明確表示 Chrome 已填寫 ZJU CAS 憑證,並授權點擊登入/確認按鈕,則代理可以在 ZJU CAS/WebVPN/機構 SSO 頁面上點擊該按鈕一次,無需讀取、複製或輸入任何憑證。此例外不適用於 CAPTCHA、QR 碼登入、簡訊/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-access 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;將這三個位置視為安裝目標,而非不同的技能版本。

批次範圍

當使用者提供明確的 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。

當已驗證一個或多個官方補充資訊檔案,但主要文章 PDF 仍無法透過使用者的授權存取取得時,使用 si_only_downloaded。請勿將其稱為 downloaded。

當 Summon SPA 在單次重新整理後持續回傳 ERR_EMPTY_RESPONSE 或無法載入時,使用 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-access 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-access 代理是 http://127.0.0.1:3456。

EndpointMethodPurpose
/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 selector點擊可見元素中心

對於包含 #! 片段的 Summon URL,請使用 /navigate 而非 /new。如果 #! 片段被移除,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. PDF 在 Chrome 中顯示後,使用 scripts/browser_pdf_downloader.mjs 從已驗證的瀏覽器上下文中儲存。

Summon 實戰筆記

從 Summon 提取 PDF、線上全文或出版商連結時:

  1. 跳過空的 href 值。第一個線上全文匹配可能是 facet 切換按鈕,而非真實連結。
  2. 將 Summon 視為緩慢的 SPA:導航後等待約 6 秒,然後重試連結提取最多 3 次,每次短暫暫停。
  3. 如果 Summon 重新導向到 login.serialssolutions.com/sso/login 並顯示 IP 在授權範圍之外,記錄 ip_not_authorized。在這種情況下,使用者可能需要 ZJU RVPN/SSLVPN 用戶端,而不僅僅是在瀏覽器頁面中使用 WebVPN,因為 CDP 控制的 Chrome 分頁可能仍使用本地網路 IP。
  4. 如果 Summon 沒有 PDF 但有線上全文連結,請先嘗試該路徑,然後再手動建構出版商 URL。
  5. 如果頁面在單次新導航和正常的 SPA 等待後持續顯示 ERR_EMPTY_RESPONSE 或無法渲染,記錄 summon_unreachable。不要在 Summon 上循環:如果需要的話,嘗試一次 DOI 的出版商登陸頁面或確認的 OA 路徑,但仍在使用者授權的瀏覽器工作階段中進行。

出版商特定模式

僅在確認論文身分後,將這些作為基於 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 秒並檢查頁面一次,然後再將其歸類為出版商挑戰。可讀的摘要頁面並不證明主要 PDF 已授權:如果仍顯示「Available to Purchase」或「Access through Institution」,請記錄適當的機構登入或購買狀態,並將任何登入選擇留給使用者。

即使主要 PDF 未授權,文章頁面上顯示的 ACS 補充資訊連結也可以合法地導向 ACS Figshare / ndownloader.figstatic.com 下載。跟隨可見的官方連結,驗證結果 SI PDF,並在主要文章也驗證之前記錄 si_only_downloaded。請不要猜測文章頁面連結之外的補充檔案名稱,也不要將可存取的 SI 視為擷取付費主要論文的許可。

Wiley

對於 DOI 前綴,例如 10.1002/... 或 10.1111/...,首先導航到已驗證的 Wiley 文章頁面,然後從該頁面自己的來源擷取:

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

請勿硬編碼 onlinelibrary.wiley.com:Summon 可能透過子網域(例如 advanced.onlinelibrary.wiley.com)進行驗證,跨來源擷取可能會失敗。同時,避免將分頁直接導航到 pdfdirect,因為瀏覽器可能會開始下載並使頁面上下文無法使用。優先使用頁面上下文的 fetch()。

Springer Nature

對於 DOI 前綴,例如 10.1007/... 和 10.1186/...:

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

機構登入解決後,這通常有效。如果直接 shell 下載回傳 401、403 或 HTML 登入頁面,請使用瀏覽器上下文的 fetch。

Nature Communications

對於 OA DOI 模式,例如 10.1038/s41467-...,嘗試:

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. 優先使用 ZJU Summon / WebVPN / 圖書館的「在線全文」連結,然後再進行 doi.org -> 出版商 的導航。
  2. 一次處理一篇的 ScienceDirect 和其他敏感出版商的文章。
  3. 在清單中保留可見的稽核軌跡;請勿同時開啟許多出版商分頁。
  4. 等待每個頁面穩定後再尋找「Download PDF」、「View PDF」或「PDF」。
  5. 使用者在完成驗證步驟後,重複使用同一個分頁,而不是不斷開啟新分頁。
  6. 避免重試循環。在將頁面交給使用者之前,一次自動嘗試失敗就足夠了。

當出版商驗證頁面出現時:

  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. 使用者表示驗證已完成後

…

(原文已截斷)

相關技能