Cnki Advanced Search
Perform advanced search on CNKI with field filters like author, title, journal, date...
Install
npx skills add cookjohn/cnki-skills --skill cnki-advanced-search -g -a claude-code -y- Repository
- cookjohn/cnki-skills1k
- Category
- Design
- Updated
- 8mo ago
- License
- See repository
- Context cost
- Mediumabout 1,684 tokens
- Runs scripts
- No, instructions only
What it does
Perform advanced search on CNKI with field filters like author, title, journal, date range, source category (SCI/EI/CSSCI/北大核心). Use when user needs precise filtered search beyond simple keywords.
CNKI Advanced Search (高级检索)
Perform a filtered search on CNKI using the old-style advanced search interface (only interface with source category checkboxes).
Arguments
$ARGUMENTS describes the search criteria in natural language. Parse it to identify:
- Subject keywords (主题), default field
- Title keywords (篇名)
- Keywords (关键词)
- Author name (作者), separate field
#au_1_value1 - Journal/source (文献来源), separate field
#magazine_value1 - Date range (时间范围),
#startYear/#endYear - Source category (来源类别:SCI, EI, 北大核心, CSSCI, CSCD)
Steps
1. Navigate
Use mcp__chrome-devtools__navigate_page → https://kns.cnki.net/kns/AdvSearch?classid=7NS01R8M
2. Search + get results (single async evaluate_script)
Replace placeholder values with actual search criteria:
async () => {
// --- Config: fill in actual values ---
const query = "KEYWORDS"; // row 1 search keywords
const fieldType = "SU"; // SU=主题, TI=篇名, KY=关键词, TKA=篇关摘, AB=摘要
const query2 = ""; // row 2 keywords (optional, "" to skip)
const fieldType2 = "KY"; // row 2 field type
const rowLogic = "AND"; // AND=并且, OR=或者, NOT=不含 (between row 1 and 2)
const sourceTypes = ["CSSCI"]; // any of: "SCI", "EI", "hx", "CSSCI", "CSCD" ([] = all)
const startYear = ""; // e.g. "2020" or "" for no limit
const endYear = ""; // e.g. "2025" or "" for no limit
const author = ""; // author name or ""
const journal = ""; // journal name or ""
// --- Wait for form ---
await new Promise((r, j) => {
let n = 0;
const c = () => { if (document.querySelector('#txt_1_value1')) 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' };


