ZIP化!「260815_超かぐや姫おつかれさま本」
by
furyu-tei
4 hours ago [2026/08/16 17:34:59]
Dropboxから「260815_超かぐや姫おつかれさま本」の画像をZIP形式でダウンロードする
@@ -8,10 +8,10 @@
*/
/*
- 「260815_超かぐや姫おつかれさま本」公開ページはこちら↓
- https://www.dropbox.com/scl/fi/2dz2rnch41n0ym6svx2v1/260815_.pdf?rlkey=79hr9bq43shkosbwhe93003lu&st=z03mvt95&e=1&dl=0
- ※関連ツイート(ポスト) → https://x.com/momocyo/status/2088566368677331068
- */
+//「260815_超かぐや姫おつかれさま本」公開ページはこちら↓
+// https://www.dropbox.com/scl/fi/2dz2rnch41n0ym6svx2v1/260815_.pdf?rlkey=79hr9bq43shkosbwhe93003lu&st=z03mvt95&e=1&dl=0
+// ※関連ツイート(ポスト) → https://x.com/momocyo/status/2088566368677331068
+*/
(async () => {
const wait = msec => new Promise(resolve => setTimeout(resolve, msec));
/*
* @title 「260815_超かぐや姫おつかれさま本」ダウンロード
* @description Dropboxから「260815_超かぐや姫おつかれさま本」の画像をZIP形式でダウンロードする
* @include https://www.dropbox.com/*
* @license MIT License
* @require
* @javascript_url
*/
/*
//「260815_超かぐや姫おつかれさま本」公開ページはこちら↓
// https://www.dropbox.com/scl/fi/2dz2rnch41n0ym6svx2v1/260815_.pdf?rlkey=79hr9bq43shkosbwhe93003lu&st=z03mvt95&e=1&dl=0
// ※関連ツイート(ポスト) → https://x.com/momocyo/status/2088566368677331068
*/
(async () => {
const wait = msec => new Promise(resolve => setTimeout(resolve, msec));
const script = document.createElement('script');
script.nonce = document.querySelector('script[nonce]').nonce;
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js';
document.documentElement.append(script);
for (let ci of [...Array(50)].map((_, i) => i)) {
console.log(ci);
if (typeof JSZip !== undefined) break;
await wait(100);
}
if (typeof JSZip === undefined) {
alert('Failed to load JSZIP');
return;
}
const document_title = document.querySelector('title').textContent;
const max_page = document.querySelector('[data-testid="page-count"]').textContent.match(/\/\s*(\d+)\s*/)[1] - 0;
const max_page_strlen = `${max_page}`.length;
const sample_img = document.querySelector('[data-testid="preview-viewport"] [id^="pageContainer"][data-index] img');
const img_url = new URL(sample_img.src);
const img_ext = img_url.pathname.match(/\.[^.]+$/)[0];
const zip = new JSZip();
for (page=0; page < max_page; page++) {
const page_str = `${page+1}`.padStart(max_page_strlen, 0);
img_url.searchParams.set('page', page);
const response = await fetch(img_url.href);
if (! response.ok) {
console.error(`Fetch failure: page ${page_str}`);
continue;
}
zip.file(`${page_str}${img_ext}`, await response.arrayBuffer());
}
const blob = await zip.generateAsync({type: 'blob', compression: 'STORE'});
const download_link = document.createElement('a');
download_link.href = URL.createObjectURL(blob);
download_link.download = `${document_title.replace(/\.[^.]+$/,'')}.zip`;
document.documentElement.append(download_link);
download_link.click();
download_link.remove();
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。