cnki-advanced-search
Perform advanced search on CNKI with field filters like author, title, journal, date range,…
Parse current CNKI search results page into structured paper data (title, authors, journal, date, citations). Use after a search has been performed and you need to extract the results.
$ npx -y skills add cookjohn/cnki-skills --skill cnki-parse-results --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/cnki-parse-resultsContext preview
The summary Claude sees to decide when to auto-load this skill.
Parse current CNKI search results page into structured paper data (title, authors, journal, date, citations). Use after a search has been performed and you need to extract the results.
name: cnki-parse-results description: Parse current CNKI search results page into structured paper data (title, authors, journal, date, citations). Use after a search has been performed and you need to extract the results. user-invokable: false
Extract structured paper data from the current CNKI search results page.
The current Chrome page must be a CNKI search results page (URL contains `kns.cnki.net` and page shows "条结果").
Use `mcp__chrome-devtools__take_snapshot`. Verify the page contains "条结果". If not, inform the user that no search results page is currently open.
Check for captcha ("拖动下方拼图完成验证") - if found, notify user to solve it manually.
Use `mcp__chrome-devtools__evaluate_script` with this function:
() => {
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, index) => {
const nameCell = row.querySelector('td.name');
const titleLink = nameCell?.querySelector('a.fz14');
const authorCell = row.querySelector('td.author');
const sourceCell = row.querySelector('td.source');
const dateCell = row.querySelector('td.date');
const dataCell = row.querySelector('td.data');
const quoteCell = row.querySelector('td.quote');
const downloadCell = row.querySelector('td.download');
const isOnlineFirst = !!nameCell?.querySelector('.marktip');
return {
number: index + 1,
title: titleLink?.innerText?.trim() || '',
url: titleLink?.href || '',
exportId: checkboxes[index]?.value || '',
authors: Array.from(authorCell?.querySelectorAll('a.KnowledgeNetLink') || []).map(a => a.innerText?.trim()),
journal: sourceCell?.querySelector('a')?.innerText?.trim() || '',
date: dateCell?.innerText?.trim() || '',
database: dataCell?.innerText?.trim() || '',
citations: quoteCell?.innerText?.trim() || '',
downloads: downloadCell?.innerText?.trim() || '',
isOnlineFirst: isOnlineFirst
};
});
const totalText = document.querySelector('.pagerTitleCell')?.innerText || '';
const totalMatch = totalText.match(/([\d,]+)/);
const pageInfo = document.querySelector('.countPageMark')?.innerText || '';
return {
papers: results,
totalCount: totalMatch ? totalMatch[1] : 'unknown',
pageInfo: pageInfo
};
}Format as a numbered list:
CNKI search results ({totalCount} total, page {pageInfo}):
1. {title} {isOnlineFirst ? "[网络首发]" : ""}
Authors: {authors joined by "; "}
Journal: {journal} | Date: {date} | Type: {database}
Citations: {citations} | Downloads: {downloads}
URL: {url}
2. ...If JavaScript returns empty (DOM structure changed), use `mcp__chrome-devtools__take_snapshot` and parse the accessibility tree manually:
Look for the repeating pattern:
| Data | Selector | Notes | |------------|----------------------------------|----------------------------| | Table | `.result-table-list tbody tr` | Each row = one paper | | Checkbox | `input.cbItem` | value = export encrypted ID | | Number | `td.seq` | Row sequence number | | Title | `td.name a.fz14` | Paper title link | | Authors | `td.author a.KnowledgeNetLink` | Author name links | | Journal | `td.source a` | Journal/source link | | Date | `td.date` | Publication date text | | DB Type | `td.data` | Database type (期刊/学位论文) | | Citations | `td.quote` | Citation count | | Downloads | `td.download` | Download count | | Online 1st | `td.name .marktip` | "网络首发" label | | Total | `.pagerTitleCell` | "共找到 X 条结果" | | Page | `.countPageMark` | "1/300" format |
CNKI (中国知网) skills for Claude Code — search, browse journals, download PDFs, export to Zotero via Chrome DevTools MCP
Repo: cookjohn/cnki-skills
Perform advanced search on CNKI with field filters like author, title, journal, date range,…
Download a paper PDF/CAJ from CNKI. Requires user to be logged in. Use when user wants to…
Export paper from CNKI and push to Zotero, or save as RIS file. Use when user wants to save a…
Query journal indexing/inclusion status on CNKI - check which databases include a journal…
Search for journals/publications on CNKI by name, ISSN, CN, or sponsor. Use when the user…
Browse journal issues, view table of contents, and download original TOC PDF from CNKI. Use…