リンクのPDFファイルをzipしてダウンロード
by
Lhankor_Mhy
2023-06-30 [2023/06/30 11:41:04]
ページ内にある~.PDFというリンクすべてからPDFファイルを取得して、zipして一括ダウンロードします。
@@ -7,39 +7,45 @@
*/
-(async ()=>{
- function _import(s){
- return new Promise(function(resolve){
- const script = document.createElement('script');
- script.src = s;
- script.onload = function(){
- resolve();
- };
- document.head.appendChild(script);
- })
- };
-
- const sleep = time => new Promise(resolve=>setTimeout(resolve,time));
- await import('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js');
- await _import('https://cdn.jsdelivr.net/npm/file-saver@2.0.2/dist/FileSaver.min.js');
-
- const zip = new JSZip();
-
- async function downloader(element){
- const response = await fetch(
- element.href,
- );
- element.style.backgroundColor = 'gray';
- let fileName = decodeURIComponent(element.href.match(/(?=[^\/]+\.pdf)[^\/]+\.pdf/));
- await sleep(2000);
-
- zip.file('files/'+fileName, await response.blob());
-
- };
-
- for ( let target of document.querySelectorAll('a[href*=".pdf"] ') ) {await downloader(target).catch(()=>{})};
- for ( let target of [...document.querySelectorAll('a')].filter(e=>e.textContent.includes('pdf') || e.textContent.includes('PDF')) ) {await downloader(target).catch(()=>{})};
- const content = await zip.generateAsync({type:"blob"});
- saveAs(content, 'files.zip');
-
+(async () => {
+ function _import(s) {
+ return new Promise(function (resolve) {
+ const script = document.createElement('script');
+ script.src = s;
+ script.onload = function () {
+ resolve();
+ };
+ document.head.appendChild(script);
+ })
+ };
+
+ const sleep = time => new Promise(resolve => setTimeout(resolve, time));
+ await import('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js');
+ await _import('https://cdn.jsdelivr.net/npm/file-saver@2.0.2/dist/FileSaver.min.js');
+
+ const zip = new JSZip();
+
+ async function downloader(element) {
+ const response = await fetch(
+ element.href,
+ );
+ element.style.backgroundColor = 'gray';
+ const fileName = decodeURIComponent(
+ element.href.match(/(?=[^\/]+\.pdf)[^\/]+\.pdf/) ??
+ element.textContent.match(/(?=[^\/]+\.pdf)[^\/]+\.pdf/)
+ );
+ console.log(fileName);
+ await sleep(2000);
+
+ let blob = await response.blob();
+ blob = blob.slice(0, blob.size, "application/pdf")
+ zip.file('files/' + fileName, blob);
+
+ };
+
+ for (let target of document.querySelectorAll('a[href*=".pdf"] ')) { await downloader(target).catch(() => { }) };
+ for (let target of [...document.querySelectorAll('a')].filter(e => e.textContent.includes('pdf') || e.textContent.includes('PDF'))) { await downloader(target).catch(() => { }) };
+ const content = await zip.generateAsync({ type: "blob" });
+ saveAs(content, 'files.zip');
+
})()
/*
* @title リンクのPDFファイルをzipしてダウンロード
* @description ページ内にある~.PDFというリンクすべてからPDFファイルを取得して、zipして一括ダウンロードします。
* @include http://*
* @license MIT License
* @javascript_url
*/
(async () => {
function _import(s) {
return new Promise(function (resolve) {
const script = document.createElement('script');
script.src = s;
script.onload = function () {
resolve();
};
document.head.appendChild(script);
})
};
const sleep = time => new Promise(resolve => setTimeout(resolve, time));
await import('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js');
await _import('https://cdn.jsdelivr.net/npm/file-saver@2.0.2/dist/FileSaver.min.js');
const zip = new JSZip();
async function downloader(element) {
const response = await fetch(
element.href,
);
element.style.backgroundColor = 'gray';
const fileName = decodeURIComponent(
element.href.match(/(?=[^\/]+\.pdf)[^\/]+\.pdf/) ??
element.textContent.match(/(?=[^\/]+\.pdf)[^\/]+\.pdf/)
);
console.log(fileName);
await sleep(2000);
let blob = await response.blob();
blob = blob.slice(0, blob.size, "application/pdf")
zip.file('files/' + fileName, blob);
};
for (let target of document.querySelectorAll('a[href*=".pdf"] ')) { await downloader(target).catch(() => { }) };
for (let target of [...document.querySelectorAll('a')].filter(e => e.textContent.includes('pdf') || e.textContent.includes('PDF'))) { await downloader(target).catch(() => { }) };
const content = await zip.generateAsync({ type: "blob" });
saveAs(content, 'files.zip');
})()
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。