跳到正文
FunCoding

cnki-download

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

Star
859
最近提交
2026年8月20日

skills/cnki-download/SKILL.md

在 GitHub 上查看

CNKI Paper Download (文献下载)

RC browser tool: navigate with browser action=open url="..."; run the JS in each step via browser action=act kind=evaluate fn="<the async function shown>" (the whole function body goes into fn). Never pass a profile — RC uses its default managed Chrome (CDP 18800).

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 browser action=open to go to the URL directly (no wait_for needed — Step 2 handles waiting).

Important: Always use browser action=open instead of clicking links on the search results page. Clicking opens a new tab and wastes 3 extra tool calls (browser action=tabs + browser action=focus + browser action=snapshot).

2. Check status and download (single async browser act kind=evaluate)

Replace FORMAT with "pdf" or "caj":

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. The download links (#pdfDown/#cajDown) are ALWAYS present
  // even when logged out — clicking them just opens a login/order page — so their
  // presence is NOT a login signal. The reliable signal is the page header: when
  // logged out it shows the "机构登录 / 个人登录" CTAs and the personal-name slot is
  // empty; once logged in the CTA text is replaced by the user's name.
  const loginArea = document.querySelector('.ecp_header_login_area, .ecp_header_login_status');
  const loginAreaText = loginArea?.innerText?.replace(/\s+/g, ' ').trim() || '';
  const personalName = document.querySelector('.ecp_header_personalName_loginbg')?.innerText?.trim() || '';
  const notLogged = !personalName && /个人登录/.test(loginAreaText);
  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 (browser action=open if URL + browser act kind=evaluate)

Verified selectors

ElementSelectorNotes
PDF download#pdfDown<a> inside li.btn-dlpdf
CAJ download#cajDown<a> inside li.btn-dlcaj
Download area.download-btnsparent <div>
Login status.ecp_header_login_area / .ecp_header_personalName_loginbglogged-out shows "机构登录 / 个人登录" CTA + empty name slot; logged-in shows username. #pdfDown/#cajDown exist in BOTH states — do NOT treat their presence as login
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.

相似的 Skill

精选

pdf

提取文本和表格、合并拆分、填写表单,也能对扫描件做 OCR。

ANanthropics/skills181k近 7 天新增 1,119 个 star

精选

canvas-design

按设计理念生成海报和视觉作品,输出 PNG 或 PDF。

ANanthropics/skills181k近 7 天新增 1,119 个 star

精选

docx

创建和编辑 Word 文档,支持目录、页码、页眉等排版。

ANanthropics/skills181k近 7 天新增 1,119 个 star

精选

doc-coauthoring

按步骤协作撰写技术方案、提案和决策文档,逐轮修改。

ANanthropics/skills181k近 7 天新增 1,119 个 star

精选

xlsx

读写 Excel 和 CSV,处理公式、格式、图表与数据清洗。

ANanthropics/skills181k近 7 天新增 1,119 个 star

精选

pptx

生成、读取和修改演示文稿,也能合并拆分幻灯片。

ANanthropics/skills181k近 7 天新增 1,119 个 star