Cnki Download

cookjohn/cnki-skills/skills/cnki-download

作者 cookjohn20d65f660456daf53ad0f7c74494ac3b829b925f無授權條款983 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫7 個月前更新

Download a paper PDF/CAJ from CNKI. Requires user to be logged in. Use when user wants to download a specific paper.

AI 產生的概覽

透過瀏覽器自動化從 CNKI 論文詳情頁下載論文的 PDF 或 CAJ 檔案。

功能
此技能引導代理從 CNKI 下載指定論文:先導覽至論文詳情頁 URL,再執行瀏覽器指令碼等待頁面載入、檢查驗證碼與登入狀態,然後點擊 PDF 或 CAJ 下載連結。它會回報論文標題以及是否已觸發下載,或傳回未登入、需要驗證碼、找不到下載連結等錯誤。文件也列出已驗證的頁面選擇器與驗證碼偵測邏輯。
適用情境
當使用者想下載某篇特定的 CNKI 論文,且已登入並具備下載權限時使用。適用於使用者提供論文詳情頁 URL 或已停留在論文詳情頁的情況。
執行需求
需要具備 navigate_page 與 evaluate_script 工具的瀏覽器自動化環境、已登入且具下載權限的 CNKI 帳號,以及連線至 CNKI 的網路存取。此技能未附帶指令碼,僅為操作說明。

CNKI Paper Download (文献下载)

Prerequisites

User must be logged in to CNKI with download permissions.

Arguments

$ARGUMENTS is optionally a paper detail URL. If blank, uses current page.

Steps

1. Navigate (if URL provided)

If URL provided: use navigate_page to go to the URL directly (no wait_for needed — Step 2 handles waiting).

Important: Always use navigate_page instead of clicking links on the search results page. Clicking opens a new tab and wastes 3 extra tool calls (list_pages + select_page + take_snapshot).

2. Check status and download (single async evaluate_script)

Replace FORMAT with "pdf" or "caj":

javascript
async () => {  // Wait for page load  await new Promise((r, j) => {    let n = 0;    const c = () => {      if (document.querySelector('.brief h1')) r();      else if (++n > 30) j('timeout');      else setTimeout(c, 500);    };    c();  });
  // Captcha check  const cap = document.querySelector('#tcaptcha_transform_dy');  if (cap && cap.getBoundingClientRect().top >= 0) {    return { error: 'captcha', message: 'CNKI 正在显示滑块验证码。请在 Chrome 中手动完成拼图验证。' };  }
  const format = "FORMAT"; // "pdf" or "caj"
  // Check download links  const pdfLink = document.querySelector('#pdfDown') || document.querySelector('.btn-dlpdf a');  const cajLink = document.querySelector('#cajDown') || document.querySelector('.btn-dlcaj a');
  // Check login status  const notLogged = document.querySelector('.downloadlink.icon-notlogged')    || document.querySelector('[class*="notlogged"]');  if (notLogged) {    return { error: 'not_logged_in', message: '下载需要登录。请先在 Chrome 中登录知网账号。' };  }
  const title = document.querySelector('.brief h1')?.innerText?.trim()?.replace(/\s*网络首发\s*$/, '') || '';
  if (format === 'pdf' && pdfLink) {    pdfLink.click();    return { status: 'downloading', format: 'PDF', title };  } else if (format === 'caj' && cajLink) {    cajLink.click();    return { status: 'downloading', format: 'CAJ', title };  } else if (pdfLink) {    pdfLink.click();    return { status: 'downloading', format: 'PDF', title };  } else if (cajLink) {    cajLink.click();    return { status: 'downloading', format: 'CAJ', title };  }
  return { error: 'no_download', message: '未找到下载链接', hasPDF: !!pdfLink, hasCAJ: !!cajLink };}

3. Report

Based on JS result:

  • status: downloading → "PDF 下载已触发:{title}。请在 Chrome 下载管理器中查看。"
  • error: not_logged_in → tell user to log in
  • error: captcha → tell user to solve captcha

Tool calls: 1–2 (navigate_page if URL + evaluate_script)

Verified selectors

ElementSelectorNotes
PDF download#pdfDown<a> inside li.btn-dlpdf
CAJ download#cajDown<a> inside li.btn-dlcaj
Download area.download-btnsparent <div>
Not logged in.downloadlink.icon-notlogged
Title.brief h1strip trailing "网络首发"

Captcha detection

Check #tcaptcha_transform_dy element's getBoundingClientRect().top >= 0. Only active when top >= 0 (visible). Pre-loaded SDK sits at top: -1000000px.

來源與署名

來源:cookjohn/cnki-skills位於skills/cnki-download提交20d65f6

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架