npx skills add cookjohn/cnki-skills --skill cnki-download
wentorai/research-claw
cnki-download
Download a paper PDF/CAJ from CNKI. Requires user to be logged in. Use when user wants to download a specific paper.
Installation
npx skills add wentorai/research-claw --skill cnki-download
Similar popular skills
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Save a site or section as local files (markdown, screenshots). Use for "download the site", off…
78.3K installsList and download all files from a Google Drive folder.
27.7K installsSave a site or section as local files (markdown, screenshots). Use for "download the site", off…
1.6K installs>- Download NVIDIA Jetson Linux BSP artifacts (BSP tarball, sample rootfs, public_sources, x-to…
1.1K installsUse when a user needs lawful academic full text, CNKI institutional access, English OA retrieva…
7.2K installsAlso in this package
Other skills from wentorai/research-claw · top by installs.
npx skills add wentorai/research-claw
More details
Agent compatibility
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Also listed on
Alternate registries and mirrors of this skill.
npx skills add https://modelscope.cn/skills/@cookjohn/cnki-download
Repository health
main
Package contents
Files included with this skill beyond the listing page.
-
skill md
SKILL.md4,709 B -
docs
SUMMARY.md137 B
History
- First seen on skills.sh
- First recorded snapshot · 8 installs
SKILL.md
CNKI Paper Download (文献下载)
RC browser tool: navigate with
browser action=open url="..."; run the JS in each step viabrowser action=act kind=evaluate fn="<the async function shown>"(the whole function body goes intofn). Never pass aprofile— RC uses its default managed Chrome (CDP 18800).
Prerequisites
User must be logged in to CNKI with download permissions.
Arguments
$ARGUMENTS is optionally a paper detail URL. If blank, uses current page.
Steps
1. Navigate (if URL provided)
If URL provided: use browser action=open to go to the URL directly (no wait_for needed — Step 2 handles waiting).
Important: Always use browser action=open instead of clicking links on the search results page. Clicking opens a new tab and wastes 3 extra tool calls (browser action=tabs + browser action=focus + browser action=snapshot).
2. Check status and download (single async browser act kind=evaluate)
Replace FORMAT with "pdf" or "caj":
async () => {
// Wait for page load
await new Promise((r, j) => {
let n = 0;
const c = () => {
if (document.querySelector('.brief h1')) 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', message: 'CNKI 正在显示滑块验证码。请在 Chrome 中手动完成拼图验证。' };
}
const format = "FORMAT"; // "pdf" or "caj"
// Check download links
const pdfLink = document.querySelector('#pdfDown') || document.querySelector('.btn-dlpdf a');
const cajLink = document.querySelector('#cajDown') || document.querySelector('.btn-dlcaj a');
// Check login status. The download links (#pdfDown/#cajDown) are ALWAYS present
// even when logged out — clicking them just opens a login/order page — so their
// presence is NOT a login signal. The reliable signal is the page header: when
// logged out it shows the "机构登录 / 个人登录" CTAs and the personal-name slot is
// empty; once logged in the CTA text is replaced by the user's name.
const loginArea = document.querySelector('.ecp_header_login_area, .ecp_header_login_status');
const loginAreaText = loginArea?.innerText?.replace(/\s+/g, ' ').trim() || '';
const personalName = document.querySelector('.ecp_header_personalName_loginbg')?.innerText?.trim() || '';
const notLogged = !personalName && /个人登录/.test(loginAreaText);
if (notLogged) {
return { error: 'not_logged_in', message: '下载需要登录。请先在 Chrome 中登录知网账号。' };
}
const title = document.querySelector('.brief h1')?.innerText?.trim()?.replace(/\s*网络首发\s*$/, '') || '';
if (format === 'pdf' && pdfLink) {
pdfLink.click();
return { status: 'downloading', format: 'PDF', title };
} else if (format === 'caj' && cajLink) {
cajLink.click();
return { status: 'downloading', format: 'CAJ', title };
} else if (pdfLink) {
pdfLink.click();
return { status: 'downloading', format: 'PDF', title };
} else if (cajLink) {
cajLink.click();
return { status: 'downloading', format: 'CAJ', title };
}
return { error: 'no_download', message: '未找到下载链接', hasPDF: !!pdfLink, hasCAJ: !!cajLink };
}
3. Report
Based on JS result:
status: downloading→ "PDF 下载已触发:{title}。请在 Chrome 下载管理器中查看。"error: notloggedin→ tell user to log inerror: captcha→ tell user to solve captcha
Tool calls: 1–2 (browser action=open if URL + browser act kind=evaluate)
Verified selectors
| Element | Selector | Notes |
|---|---|---|
| PDF download | #pdfDown |
<a> inside li.btn-dlpdf |
| CAJ download | #cajDown |
<a> inside li.btn-dlcaj |
| Download area | .download-btns |
parent <div> |
| Login status | .ecpheaderloginarea / .ecpheaderpersonalNameloginbg |
logged-out shows "机构登录 / 个人登录" CTA + empty name slot; logged-in shows username. #pdfDown/#cajDown exist in BOTH states — do NOT treat their presence as login |
| Title | .brief h1 |
strip trailing "网络首发" |
Captcha detection
Check #tcaptchatransformdy element's getBoundingClientRect().top >= 0. Only active when top >= 0 (visible). Pre-loaded SDK sits at top: -1000000px.