cnki-download について
cnki-downloadは、CNKIから論文をダウンロードするスキルです。現在のページまたは指定URLを使い、PDFとCAJに対応し、ログイン状態と認証画面を確認します。
主な機能
- 01現在のページやURLからダウンロード
- 02PDFとCAJ形式に対応
- 03ログイン状態と認証画面を確認
- 04論文タイトルを取得
活用シーン
- 01CNKI論文の全文ダウンロード
- 02ログインが必要かの確認
- 03認証画面への対応
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ cookjohn/ cnki-skills --skill cnki-downloadインストール後、Claude Code で/cnki-downloadを入力して読み込まれたか確認します。
詳細
CNKI 論文のダウンロード(文献下载)
前提条件
ユーザーは、ダウンロード権限のある CNKI アカウントにログインしている必要があります。
引数
$ARGUMENTS は論文詳細ページの URL を指定できます(省略可)。空欄の場合は現在のページを使用します。
手順
1. 移動(URL が指定されている場合)
URL が指定されている場合:navigate_page を使って URL に直接移動します(wait_for は不要です。手順 2 で待機します)。
重要:検索結果ページのリンクをクリックする代わりに、必ず navigate_page を使用してください。クリックすると新しいタブが開き、追加で 3 回のツール呼び出し(list_pages + select_page + take_snapshot)が必要になります。
2. ステータスの確認とダウンロード(単一の非同期 evaluate_script)
FORMAT を "pdf" または "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
const notLogged = document.querySelector('.downloadlink.icon-notlogged')
|| document.querySelector('[class*="notlogged"]');
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. 結果の報告
JS の結果に基づいて、次のように対応します。
status: downloading→ 「PDF のダウンロードを開始しました:{title}。Chrome のダウンロード マネージャーで確認してください。」error: not_logged_in→ ユーザーにログインするよう伝えますerror: captcha→ ユーザーに CAPTCHA を解決するよう伝えます
ツール呼び出し:1~2 回(URL がある場合は navigate_page + evaluate_script)
確認済みセレクター
| 要素 | セレクター | 備考 |
|---|---|---|
| PDF のダウンロード | #pdfDown | li.btn-dlpdf 内の <a> |
| CAJ のダウンロード | #cajDown | li.btn-dlcaj 内の <a> |
| ダウンロード領域 | .download-btns | 親の <div> |
| 未ログイン | .downloadlink.icon-notlogged | |
| タイトル | .brief h1 | 末尾の「网络首发」を削除 |
CAPTCHA の検出
#tcaptcha_transform_dy 要素の getBoundingClientRect().top >= 0 を確認します。
top >= 0(表示されている)の場合にのみ有効です。事前読み込みされた SDK は top: -1000000px にあります。
コメント
Markdown 対応