Cnki Journal Search

cookjohn/cnki-skills/skills/cnki-journal-search

by cookjohn20d65f660456daf53ad0f7c74494ac3b829b925fNo license983 starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated 7 months ago

Search for journals/publications on CNKI by name, ISSN, CN, or sponsor. Use when the user wants to find a specific journal or browse publications.

Instructions onlyResearch & Analysis
AI-generated overview

Searches CNKI for journals by name, ISSN, CN number, or sponsor and extracts journal metadata.

What it does
Drives a Chrome DevTools MCP browser session to the CNKI journal navigation site, fills the search box with the supplied journal name, ISSN, CN number, or sponsor, and runs the search. It detects the search type from the query format, filters results to the journal tab, and extracts each journal's name, URL, ISSN, CN, impact factors, citation and download counts, and sponsor. Results are presented as a numbered list with the total count.
When to use it
Use it when a user wants to find a specific journal or browse publications on CNKI, for example by journal title, ISSN, CN number, or sponsoring institution. It also handles the case where a single journal result can be opened for further detail.
Requirements
Requires a Chrome DevTools MCP browser toolset with page navigation and script evaluation, plus network access to navi.cnki.net. No scripts ship with the skill; it is instructions only. A visible Tencent captcha may interrupt the search.

CNKI Journal Search (期刊检索)

Arguments

$ARGUMENTS is a journal name, ISSN, CN number, or sponsor name.

Steps

1. Navigate

Use mcp__chrome-devtools__navigate_page → https://navi.cnki.net/knavi

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

Use mcp__chrome-devtools__evaluate_script. Replace QUERY_HERE with actual search term:

javascript
async () => {  const query = "QUERY_HERE";
  // Wait for page load  await new Promise((r, j) => {    let n = 0;    const c = () => { if (document.querySelector('input.researchbtn')) r(); else if (++n > 30) j('timeout'); else setTimeout(c, 500); };    c();  });
  // Check captcha (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' };
  // Auto-detect search type and fill  const select = document.querySelector('select');  if (select) {    if (/^\d{4}-\d{3}[\dXx]$/.test(query)) select.value = 'ISSN';    else if (/^\d{2}-\d{4}/.test(query)) select.value = 'CN';    select.dispatchEvent(new Event('change', { bubbles: true }));  }
  const input = document.querySelector('input[placeholder*="检索词"]');  if (input) input.value = query;
  // Click search button (verified selector: input.researchbtn)  document.querySelector('input.researchbtn')?.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();  });
  // Click 期刊 tab to filter journals only  const tabs = document.querySelectorAll('li a');  for (const a of tabs) { if (a.innerText.trim() === '期刊') { a.click(); break; } }  await new Promise(r => setTimeout(r, 1500));
  // Extract journal results  const body = document.body.innerText;  const countMatch = body.match(/共\s*(\d+)\s*条结果/) || body.match(/找到\s*(\d+)\s*条结果/);  const count = countMatch ? parseInt(countMatch[1]) : 0;
  const results = [];  const titleLinks = document.querySelectorAll('a[href*="knavi/detail"]');  titleLinks.forEach(link => {    const text = link.innerText?.trim();    if (!text || text.length < 2) return;    const parent = link.closest('li, .list-item') || link.parentElement?.parentElement;    const pt = parent?.innerText || '';    results.push({      name: text.split('\n')[0]?.trim(),      url: link.href,      issn: pt.match(/ISSN[::]\s*(\S+)/)?.[1] || '',      cn: pt.match(/CN[::]\s*(\S+)/)?.[1] || '',      cif: pt.match(/复合影响因子[::]\s*([\d.]+)/)?.[1] || '',      aif: pt.match(/综合影响因子[::]\s*([\d.]+)/)?.[1] || '',      citations: pt.match(/被引次数[::]\s*([\d,]+)/)?.[1] || '',      downloads: pt.match(/下载次数[::]\s*([\d,]+)/)?.[1] || '',      sponsor: pt.match(/主办单位[::]\s*(.+?)(?=\n|ISSN)/)?.[1]?.trim() || ''    });  });
  return { query, count, results };}

3. Present results

期刊检索 "$ARGUMENTS"(共 {count} 条):
1. {name}   ISSN: {issn} | CN: {cn}   复合影响因子: {cif} | 综合影响因子: {aif}   被引: {citations} | 下载: {downloads}

Notes

  • Journal detail pages open in new tab — use list_pages + select_page
  • If only 1 journal result, can auto-navigate to detail page for cnki-journal-index
  • Search button selector: input.researchbtn (not generic button)

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).

Tool calls: 2 (navigate + evaluate_script)

Source and attribution

Source:cookjohn/cnki-skillsinskills/cnki-journal-searchat commit20d65f6

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal