読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

サイトの画像を一括ダウンロード

訳あって、サイトに表示されているimg画像を一括してダウンロードするスクリプトを書きました。

((func) ->
    scr = document.createElement 'script'
    scr.src = "//ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"; # 短いのに大げさですが、jQueryを使います
    scr.onload = ->
        func jQuery.noConflict true
    document.body.appendChild scr
) ($) ->
    $('img').each (num) -> # セレクタを変更すると欲しい部分だけにしぼれる
        a = document.createElement 'a'
        a.download = num + '.jpg' # jpg決めうちの品のないコード
        a.href = $(this).attr 'src'
        evt = document.createEvent 'MouseEvent'
        evt.initEvent 'click', true, false
        a.dispatchEvent evt
        return
    return

これをコンパイルして、自分のサイトに置きます。

次に、このスクリプトを読み込むブックマークレットを作ります。

javascript:(function(d,s){s=d.createElement("script");s.src="<スクリプトのURL>?"+Date.now();d.body.appendChild(s)})(document)

取得したいサイトを開いて、ブックマークレットをクリックすると、画像のダウンロードが始まります。
(Chromeの場合、初回だけ複数ダウンロードを許可するかどうか確認のウィンドウが開きました。)

ファイル名に<番号>.jpgを指定していますが、他の種類の画像もあるので、本来対称のsrc属性を調べて決定すべきです。
src属性からハッシュを消して拡張子を取り出すのがそれっぽい処理ですが、srcはdataURLの場合もあるのでご注意ください。

不具合

Chromeの場合、最初の0から19までの画像は<番号>.jpgの名前で保存されましたが、それ以降はimages.jpeg, image (番号).jpegという名前になりました。なぜでしょう?自分の用は足せたので原因を調べたりしていません。あしからず。