pixivで大量イメージをダウンロードしたい
pixivでお気に入りのユーザのイメージをダウンロードしたいけど、量が多いケースがり大変なことがあるかと思います。
その手順を可能な限り自動化したいと思います。
まずは対象のイメージを一括で開く。
ユーザの作品一覧ページ
(例)https://www.pixiv.net/users/*******/artworks
から
纏めてイメージを開いてダンロードするため、Firefoxのアドオン「Snap Links」を使用して対象のページを開きます。(1つ1つ開いても良いと思います)
しかしページを開いた先に複数イメージが登録されているページ構成だと、それぞれのタブを開いて1回1回イメージ(「すべてを見る」ボタンを含む)をクリックして展開していく必要があります。
ユーザスクリプトで「すべて見る」ボタンを自動でクリックさせる
そこでページロードが終わったところでFirefoxのアドオン「Tampermonkey」でイメージ「URLにimg-masterを含む箇所」を自動でクリックするスクリプトを組みました。
(スクリプトアレルギーの方もいるかと思いますが、Tampermonkeyのアドオン内でスクリプトが実行できる環境が整えられており、複雑な環境構築などは必要ありません)
// ==UserScript==
// @name Pixiv「表示する」ボタン or img-master画像クリック自動化
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 「表示する」ボタンがあればクリックし、なければimg-master画像をクリックします。
// @match https://www.pixiv.net/artworks/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
let showClicked = false;
let imgClicked = false;
function clickShowButton() {
const btn = Array.from(document.querySelectorAll('button')).find(
el => el.textContent.trim() === '表示する'
);
if (btn) {
console.log('「表示する」ボタンをクリックしました');
btn.click();
return true;
}
return false;
}
function clickImgMasterImage() {
const img = document.querySelector('img[src*="img-master"]');
if (img) {
console.log('img-master画像をクリックしました');
img.click();
return true;
}
return false;
}
const observer = new MutationObserver(() => {
if (!showClicked) {
showClicked = clickShowButton();
if (!showClicked) {
// 「表示する」ボタンが見つからなければimg-master画像をクリックする
imgClicked = clickImgMasterImage();
if (imgClicked) observer.disconnect();
}
} else if (!imgClicked) {
imgClicked = clickImgMasterImage();
if (imgClicked) observer.disconnect();
}
});
window.addEventListener('load', () => {
observer.observe(document.body, { childList: true, subtree: true });
// 5秒待っても何も見つからなければimg-master画像クリックして監視解除
setTimeout(() => {
if (!showClicked && !imgClicked) {
console.log('タイムアウト:直接img-master画像をクリックします');
if (clickImgMasterImage()) observer.disconnect();
}
}, 5000);
});
})();
またこれは、センシティブな画像を表示する際に表示される「表示する」ボタンのクリックにも対応しています。
イメージの一括ダウンロード
複数タブを含むイメージのダウンロードにはアドオンの「DownThemAll!」を使用しています。
ダウンロード要素の高速フィルタリングにイメージのURLである「img-original」を含めておくと、ターゲットとなるイメージを自動でダウンロードできます。
さいごに
ページ内に「reCAPTCHA」要素が組み込まれているのか最近大量に開くとエラーとなるケースがありますが、これは次回対応したいと思います。