cnki-journal-toc

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

CNKI Journal Table of Contents (期刊目录浏览 + 原版目录下载)

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

Browse journal issues, extract the paper list, and optionally open/download the original TOC PDF (封面+目录扫描版).
浏览期刊期数、提取论文列表,还可选择打开/下载原版目录PDF(封面+目录扫描版)。

Arguments

参数说明

$ARGUMENTS
describes what to browse:
  • {journal name}
    — which journal
  • {year}
    (optional) — which year, defaults to latest
  • {issue}
    (optional) — which issue number
  • download
    (optional) — if included, download the original TOC PDF
Examples:
  • 计算机学报 2026 01期
    — browse 2026 issue 1
  • 计算机学报 2026 01期 download
    — download original TOC PDF
  • 计算机学报
    — shows latest (网络首发)
$ARGUMENTS
用于指定浏览内容:
  • {期刊名称}
    — 指定目标期刊
  • {年份}
    (可选) — 指定年份,默认显示最新期
  • {期数}
    (可选) — 指定期数
  • download
    (可选) — 若包含该参数,则下载原版目录PDF
示例:
  • 计算机学报 2026 01期
    — 浏览2026年第1期
  • 计算机学报 2026 01期 download
    — 下载原版目录PDF
  • 计算机学报
    — 显示最新期(网络首发)

Steps

操作步骤

1. Navigate to journal detail page

1. 进入期刊详情页

If not already on a journal detail page (
navi.cnki.net/knavi/detail
):
  • Use
    cnki-journal-search
    to find the journal
  • Use
    mcp__chrome-devtools__list_pages
    +
    mcp__chrome-devtools__select_page
    to switch to the journal detail tab (opens in new tab)
如果当前不在期刊详情页(
navi.cnki.net/knavi/detail
):
  • 使用
    cnki-journal-search
    工具查找目标期刊
  • 使用
    mcp__chrome-devtools__list_pages
    +
    mcp__chrome-devtools__select_page
    切换到期刊详情标签页(在新标签页打开)

2. Select issue + extract papers (single async evaluate_script)

2. 选择期数并提取论文列表(单次异步执行脚本)

Replace
YEAR
and
ISSUE
with actual values (e.g.,
"2025"
,
"No.01"
). The "刊期浏览" tab is the default active view — no need to click it.
javascript
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
  };
}
YEAR
ISSUE
替换为实际值(例如
"2025"
"No.01"
)。 “刊期浏览”标签页默认处于激活状态,无需点击。
javascript
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. Present results

3. 展示结果

undefined
undefined

{journal_name} — {issueLabel}

{期刊名称} — {期数标签}

共 {paperCount} 篇论文:
  1. {title} [pp. {pages}] 作者:{authors}
  2. {title} [pp. {pages}] 作者:{authors} ...
undefined
共 {论文数量} 篇论文:
  1. {标题} [页码:{页码范围}] 作者:{作者}
  2. {标题} [页码:{页码范围}] 作者:{作者} ...
undefined

4. Download original TOC PDF (if requested)

4. 下载原版目录PDF(若用户请求)

If user requested download, or asks for "原版目录":
Method A — Click "原版目录浏览" to open reader, then download:
  1. Find the
    link
    with text "原版目录浏览" in the snapshot (class
    btn-preview
    )
  2. Click it — this opens a new tab with the reader page (
    kns.cnki.net/reader/report
    )
  3. Use
    mcp__chrome-devtools__list_pages
    to find the new reader tab
  4. Use
    mcp__chrome-devtools__select_page
    to switch to it
  5. Use
    mcp__chrome-devtools__wait_for
    with text
    ["下载"]
  6. Take snapshot — find the
    link
    with text "下载" (the download button in the reader toolbar)
  7. Click the download link — triggers PDF download via Chrome
Method B — Direct download from reader page:
If already on a reader page (
kns.cnki.net/reader/report
):
  1. Take snapshot
  2. Find
    link
    with text "下载"
  3. Click it
After clicking, inform the user:
原版目录 PDF 下载已触发,请在 Chrome 下载管理器中查看。
如果用户请求下载,或询问“原版目录”:
方法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 下载管理器中查看。

Tool calls

工具调用说明

  • Browse issue: 1 (evaluate_script only) — after navigating to journal page
  • Download TOC: requires snapshot + click + tab switching (new tab)
  • 浏览期数:仅需1次操作(仅执行evaluate_script)——进入期刊页面后操作
  • 下载目录:需要快照+点击+标签页切换(新标签页)

Verified selectors

已验证的选择器

Journal Detail — 刊期浏览

期刊详情页 — 刊期浏览

ElementSelectorNotes
刊期浏览 tab
a
text "刊期浏览"
default active (
li.on.cur
), no need to click
Year area
#yearissue0
/
.yearissuepage
Year groups
dl.s-dataList
inside
#yearissue0
Year label
dl.s-dataList dt
text "2026", "2025" etc.
Issue links
dl.s-dataList dd a
text "No.01", "No.12" etc.
Issue label
span.date-list
text "2025年01期"
Paper container
#CataLogContent
Paper entries
#CataLogContent dd.row
Paper title
dd.row span.name a
href to
kcms2/article/abstract
Paper authors
dd.row span.author
semicolon-separated
Paper page range
dd.row span.company
class is "company" but holds page range
Paper ID
dd.row b[name="encrypt"]
id like "JSJX202512001"
原版目录浏览
a.btn-preview:not(.btn-back)
href to
bar.cnki.net/bar/download/order
返回
a.btn-preview.btn-back
元素选择器说明
刊期浏览标签页
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"但存储页码范围
论文ID
dd.row b[name="encrypt"]
ID格式如"JSJX202512001"
原版目录浏览
a.btn-preview:not(.btn-back)
链接指向
bar.cnki.net/bar/download/order
返回
a.btn-preview.btn-back

Reader Page (kns.cnki.net/reader/report)

阅读器页面(kns.cnki.net/reader/report)

ElementPattern
Page title
RootWebArea "期刊原版目录"
Download button
link
text "下载", URL to
bar.cnki.net/bar/download/order
Current page
textbox
value (page number)
Total pages
StaticText
(e.g., "4")
Navigation
generic
description "上一页" / "下一页"
元素匹配规则
页面标题
RootWebArea "期刊原版目录"
下载按钮
link
文本为"下载",链接指向
bar.cnki.net/bar/download/order
当前页码
textbox
的值(页码)
总页数
StaticText
(例如"4")
导航按钮
generic
描述为"上一页"/"下一页"

Important Notes

重要注意事项

  • "原版目录浏览" only appears when a specific issue is selected (not for 网络首发 view).
  • The reader page opens in a new tab.
  • The download link in the reader requires login. If download fails, remind user to log in.
  • The download URL is session-specific — do not cache or reuse.
  • “原版目录浏览”仅在选择特定期数时显示(网络首发视图不显示)。
  • 阅读器页面在新标签页打开。
  • 阅读器中的下载链接需要登录。如果下载失败,请提醒用户登录。
  • 下载URL与会话绑定,请勿缓存或重复使用。