Cnki Search

cookjohn/cnki-skills/skills/cnki-search

作者 cookjohn20d65f660456daf53ad0f7c74494ac3b829b925f无许可证983 个星标收录于 2026年10月9日更新于 2026年10月9日仓库7个月前更新

Search CNKI (中国知网) for papers by keyword. Use when the user wants to find academic papers on a topic.

AI 生成的概览

通过浏览器自动化按关键词检索中国知网(CNKI),返回结构化的学术论文列表。

功能
该技能通过 Chrome DevTools MCP 浏览器会话打开 CNKI 检索页面,填入给定关键词并提交查询,然后提取当前结果页。它返回结果总数、页码指示,以及包含标题、链接、导出 ID、作者、期刊、日期、被引次数和下载次数的结构化论文列表。文档还说明了验证码检测方式以及如何通过 URL 打开某篇论文。
适用场景
当用户需要在 CNKI 上查找某主题的学术论文,并希望获得标题、作者、期刊、日期或被引与下载数据时使用。也适用于后续打开某条结果,或将结果交给 Zotero 导出流程的请求。
运行要求
需要 Chrome DevTools MCP 工具(navigate_page、evaluate_script)以及访问 kns.cnki.net 的网络连接。该技能不附带脚本,仅为操作说明。CNKI 会话可能弹出验证码,需由用户完成验证。

CNKI Basic Search

Search CNKI for papers using keyword(s). Returns result count and structured result list (titles, URLs, authors, journal, date) in a single call.

Arguments

$ARGUMENTS contains the search keyword(s) in Chinese or English.

Steps

1. Navigate

Use mcp__chrome-devtools__navigate_page → https://kns.cnki.net/kns8s/search

2. Search + extract results (single evaluate_script, NO wait_for)

Replace YOUR_KEYWORDS with actual search terms:

javascript
async () => {  const query = "YOUR_KEYWORDS";
  // Wait for search input (replaces wait_for)  await new Promise((r, j) => {    let n = 0;    const c = () => { if (document.querySelector('input.search-input')) r(); else if (++n > 30) j('timeout'); else setTimeout(c, 500); };    c();  });
  // Check captcha (only if visible on screen, not hidden SDK at top:-1000000)  const outer = document.querySelector('#tcaptcha_transform_dy');  if (outer && outer.getBoundingClientRect().top >= 0) return { error: 'captcha' };
  // Fill and submit (verified selectors: input.search-input, input.search-btn)  const input = document.querySelector('input.search-input');  input.value = query;  input.dispatchEvent(new Event('input', { bubbles: true }));  document.querySelector('input.search-btn')?.click();
  // Wait for results  await new Promise((r, j) => {    let n = 0;    const c = () => { if (document.body.innerText.includes('条结果')) r(); else if (++n > 30) j('timeout'); else setTimeout(c, 500); };    c();  });
  // Check captcha again  const outer2 = document.querySelector('#tcaptcha_transform_dy');  if (outer2 && outer2.getBoundingClientRect().top >= 0) return { error: 'captcha' };
  // Extract current page results (merged parse-results)  const rows = document.querySelectorAll('.result-table-list tbody tr');  const checkboxes = document.querySelectorAll('.result-table-list tbody input.cbItem');  const results = Array.from(rows).map((row, i) => {    const titleLink = row.querySelector('td.name a.fz14');    const authors = Array.from(row.querySelectorAll('td.author a.KnowledgeNetLink') || []).map(a => a.innerText?.trim());    const journal = row.querySelector('td.source a')?.innerText?.trim() || '';    const date = row.querySelector('td.date')?.innerText?.trim() || '';    const citations = row.querySelector('td.quote')?.innerText?.trim() || '';    const downloads = row.querySelector('td.download')?.innerText?.trim() || '';    return {      n: i + 1,      title: titleLink?.innerText?.trim() || '',      href: titleLink?.href || '',      exportId: checkboxes[i]?.value || '',      authors: authors.join('; '),      journal,      date,      citations,      downloads    };  });
  return {    query,    total: document.querySelector('.pagerTitleCell')?.innerText?.match(/([\d,]+)/)?.[1] || '0',    page: document.querySelector('.countPageMark')?.innerText || '1/1',    results  };}

3. Report

Present results as a numbered list:

Searched CNKI for "$ARGUMENTS": found {total} results (page {page}).
1. {title}   Authors: {authors} | Journal: {journal} | Date: {date}   Citations: {citations} | Downloads: {downloads}
2. ...

4. Follow-up: navigate to a paper

When the user wants to open or download a specific paper, use navigate_page with the result's href URL directly — do NOT click the link (clicking opens a new tab and wastes 3 extra tool calls for tab management).

Captcha detection

Check #tcaptcha_transform_dy element's getBoundingClientRect().top >= 0. Tencent captcha SDK preloads DOM at top: -1000000px (off-screen, not active). Only return error: 'captcha' when top >= 0 (actually visible to user).

Verified selectors

ElementSelectorNotes
Search inputinput.search-inputid=txt_search, placeholder "中文文献、外文文献"
Search buttoninput.search-btntype="button"
Result count.pagerTitleCelltext "共找到 X 条结果"
Page indicator.countPageMarktext "1/300"
Result rows.result-table-list tbody trEach row = one paper
Title linktd.name a.fz14Paper title with href
Authorstd.author a.KnowledgeNetLinkAuthor name links
Journaltd.source aJournal/source link
Datetd.datePublication date text
Citationstd.quoteCitation count
Downloadstd.downloadDownload count

Batch export to Zotero

When user wants to save results to Zotero, use batch export directly from the results page — do NOT navigate to each detail page. The exportId in results equals the detail page's #export-id. Call cnki-export skill with batch mode (Step 1B). See cnki-export SKILL.md for details.

Tool calls: 2 (navigate + evaluate_script)

来源与署名

来源:cookjohn/cnki-skills位于skills/cnki-search提交20d65f6

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架