cnki-journal-searchlisted
Install: claude install-skill Jensen-Yao/agents-skills
# CNKI Journal Search (期刊检索)
## Arguments
`the user request` is a journal name, ISSN, CN number, or sponsor name.
## Steps
### 1. Navigate
Use `chrome-devtools.navigate_page` → `https://navi.cnki.net/knavi`
### 2. Search + extract results (single evaluate_script, NO wait_for)
Use `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 (d