mcpField
C
cnki-journal-toc

cnki-journal-toc

github.com/cookjohn生产力1.0k332 次安装33 周前更新
代码仓库

关于 cnki-journal-toc

用于浏览 CNKI 期刊各期并提取论文列表的浏览器技能。指定期次后,还可打开并下载该期的扫描版原版目录 PDF。

主要功能

  1. 01按年份和期次浏览期刊目录
  2. 02提取论文标题、作者和页码范围
  3. 03打开原版目录阅读器
  4. 04触发 PDF 下载

适用场景

  1. 01查看指定期刊期次中的论文
  2. 02查找文章作者和页码范围
  3. 03下载期刊扫描版目录 PDF

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cookjohn/cnki-skills --skill cnki-journal-toc

安装后在 Claude Code 中输入/cnki-journal-toc确认已加载。

详细介绍

CNKI 期刊目录(期刊目录浏览 + 原版目录下载)

浏览期刊各期,提取论文列表,并可选择打开/下载原版目录 PDF(封面 + 目录扫描版)。

参数

$ARGUMENTS 描述要浏览的内容:

  • {journal name} — 期刊名称
  • {year}(可选)— 年份,默认为最新年份
  • {issue}(可选)— 期号
  • download(可选)— 如果包含此项,则下载原版目录 PDF

示例:

  • 计算机学报 2026 01期 — 浏览 2026 年第 1 期
  • 计算机学报 2026 01期 download — 下载原版目录 PDF
  • 计算机学报 — 显示最新内容(网络首发)

步骤

1. 打开期刊详情页

如果当前不在期刊详情页(navi.cnki.net/knavi/detail):

  • 使用 cnki-journal-search 查找期刊
  • 使用 mcp__chrome-devtools__list_pages + mcp__chrome-devtools__select_page 切换到期刊详情标签页(会在新标签页中打开)
2. 选择期号 + 提取论文(单次异步 evaluate_script)

将 YEAR 和 ISSUE 替换为实际值(例如 "2025"、"No.01")。 “刊期浏览”标签页默认处于活动状态,无需点击。

async () => {
  const year = "YEAR";
  const issue = "ISSUE"; // Format: "No.01", "No.12", etc.

  const dls = document.querySelectorAll('#yearissue0 dl.s-dataList');
  let target = null;
  for (const dl of dls) {
    if (dl.querySelector('dt')?.innerText?.trim() === year) {
      target = Array.from(dl.querySelectorAll('dd a')).find(a => a.innerText.trim() === issue);
      break;
    }
  }
  if (!target) {
    // Return available years and issues for the requested year
    const available = Array.from(dls).map(dl => ({
      year: dl.querySelector('dt')?.innerText?.trim(),
      issues: Array.from(dl.querySelectorAll('dd a')).map(a => a.innerText.trim())
    })).filter(y => y.year);
    return { error: 'issue_not_found', year, issue, available: available.slice(0, 5) };
  }

  target.click();

  // Wait for paper list to load
  await new Promise((r, j) => {
    let n = 0;
    const c = () => {
      const rows = document.querySelectorAll('#CataLogContent dd.row');
      if (rows.length > 0) r();
      else if (++n > 30) j('timeout');
      else setTimeout(c, 500);
    };
    setTimeout(c, 1000);
  });

  // Extract papers
  const rows = document.querySelectorAll('#CataLogContent dd.row');
  const papers = Array.from(rows).map((dd, i) => ({
    no: i + 1,
    title: dd.querySelector('span.name a')?.innerText?.trim(),
    authors: dd.querySelector('span.author')?.innerText?.trim()?.replace(/;$/, ''),
    pages: dd.querySelector('span.company')?.innerText?.trim()
  }));

  // Get 原版目录 URL
  const tocBtn = document.querySelector('a.btn-preview:not(.btn-back)');

  return {
    issueLabel: document.querySelector('span.date-list')?.innerText?.trim(),
    paperCount: papers.length,
    papers,
    tocUrl: tocBtn?.href || null,
    url: location.href
  };
}
3. 呈现结果
## {journal_name} — {issueLabel}

共 {paperCount} 篇论文:

1. {title}  [pp. {pages}]
   作者:{authors}

2. {title}  [pp. {pages}]
   作者:{authors}
...
4. 下载原版目录 PDF(如有需要)

如果用户要求下载,或询问“原版目录”:

方法 A — 点击“原版目录浏览”打开阅读器,然后下载:

  1. 在快照中查找文本为“原版目录浏览”的 link(类名为 btn-preview)
  2. 点击它——这会在新标签页中打开阅读器页面(kns.cnki.net/reader/report)
  3. 使用 mcp__chrome-devtools__list_pages 查找新打开的阅读器标签页
  4. 使用 mcp__chrome-devtools__select_page 切换到该标签页
  5. 使用 mcp__chrome-devtools__wait_for,文本参数为 ["下载"]
  6. 获取快照——查找文本为“下载”的 link(阅读器工具栏中的下载按钮)
  7. 点击下载链接——通过 Chrome 触发 PDF 下载

方法 B — 从阅读器页面直接下载:

如果当前已在阅读器页面(kns.cnki.net/reader/report):

  1. 获取快照
  2. 查找文本为“下载”的 link
  3. 点击它

点击后告知用户:

原版目录 PDF 下载已触发,请在 Chrome 下载管理器中查看。

工具调用

  • 浏览期号:1 次(仅 evaluate_script)——导航到期刊页面后
  • 下载目录:需要获取快照 + 点击 + 切换标签页(新标签页)

已验证的选择器

期刊详情页 — 刊期浏览
元素选择器备注
刊期浏览标签页文本为“刊期浏览”的 a默认活动状态(li.on.cur),无需点击
年份区域#yearissue0 / .yearissuepage
年份分组dl.s-dataList位于 #yearissue0 内
年份标签dl.s-dataList dt文本如“2026”“2025”等
期号链接dl.s-dataList dd a文本如“No.01”“No.12”等
期号标签span.date-list文本如“2025年01期”
论文容器#CataLogContent
论文条目#CataLogContent dd.row
论文标题dd.row span.name a指向 kcms2/article/abstract 的链接
论文作者dd.row span.author以分号分隔
论文页码范围dd.row span.company类名为“company”,但存放的是页码范围
论文 IDdd.row b[name="encrypt"]ID 如“JSJX202512001”
原版目录浏览a.btn-preview:not(.btn-back)指向 bar.cnki.net/bar/download/order
返回a.btn-preview.btn-back
阅读器页面(kns.cnki.net/reader/report)
元素匹配模式
页面标题RootWebArea "期刊原版目录"
下载按钮文本为“下载”的 link,URL 指向 bar.cnki.net/bar/download/order
当前页textbox 的值(页码)
总页数StaticText(例如,“4”)
导航描述为“上一页”/“下一页”的 generic

重要说明

  • 只有在选中具体期号时才会显示“原版目录浏览”(网络首发视图中不显示)。
  • 阅读器页面会在新标签页中打开。
  • 阅读器中的下载链接需要登录。若下载失败,请提醒用户登录。
  • 下载 URL 与会话相关——请勿缓存或重复使用。

评论

支持 Markdown