Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rsato/fd390bcf05e6fd5ca26af145ccc2f405 to your computer and use it in GitHub Desktop.
Save rsato/fd390bcf05e6fd5ca26af145ccc2f405 to your computer and use it in GitHub Desktop.
2020年3月11日~2020年4月12日まで全巻無料公開している「小学館版 学習まんが 少年少女日本の歴史」のページ画像を保存するスクリプトです。Groovy + Geb(Selenium) + Mozilla Firefox を使用しています。小学館版 学習まんが 少年少女日本の歴史:https://kids-km3.shogakukan.co.jp/
@Grab('org.gebish:geb-core')
@Grab('org.seleniumhq.selenium:selenium-firefox-driver')
@GrabExclude('org.codehaus.groovy:groovy-all')
import geb.Browser
def books = [
'https://kids-km3.shogakukan.co.jp/books/nichireki01':'少年少女日本の歴史1 日本の誕生 旧石器・縄文・弥生時代',
'https://kids-km3.shogakukan.co.jp/books/nichireki02':'少年少女日本の歴史2 飛鳥の朝廷 古墳・飛鳥時代',
'https://kids-km3.shogakukan.co.jp/books/nichireki03':'少年少女日本の歴史3 奈良の都 奈良時代',
'https://kids-km3.shogakukan.co.jp/books/nichireki04':'少年少女日本の歴史4 平安京の人びと 平安時代前期',
'https://kids-km3.shogakukan.co.jp/books/nichireki05':'少年少女日本の歴史5 貴族のさかえ 平安時代中期・後期',
'https://kids-km3.shogakukan.co.jp/books/nichireki06':'少年少女日本の歴史6 源平の戦い 平安時代末期',
'https://kids-km3.shogakukan.co.jp/books/nichireki07':'少年少女日本の歴史7 鎌倉幕府の成立 鎌倉時代',
'https://kids-km3.shogakukan.co.jp/books/nichireki08':'少年少女日本の歴史8 南朝と北朝 南北朝・室町時代前期',
'https://kids-km3.shogakukan.co.jp/books/nichireki09':'少年少女日本の歴史9 立ちあがる民衆 室町時代後期',
'https://kids-km3.shogakukan.co.jp/books/nichireki10':'少年少女日本の歴史10 戦国大名の争い 戦国時代',
'https://kids-km3.shogakukan.co.jp/books/nichireki11':'少年少女日本の歴史11 天下の統一 安土・桃山時代',
'https://kids-km3.shogakukan.co.jp/books/nichireki12':'少年少女日本の歴史12 江戸幕府ひらく 江戸時代初期',
'https://kids-km3.shogakukan.co.jp/books/nichireki13':'少年少女日本の歴史13 士農工商 江戸時代前期',
'https://kids-km3.shogakukan.co.jp/books/nichireki14':'少年少女日本の歴史14 幕府の改革 江戸時代中期',
'https://kids-km3.shogakukan.co.jp/books/nichireki15':'少年少女日本の歴史15 ゆきづまる幕府 江戸時代後期',
'https://kids-km3.shogakukan.co.jp/books/nichireki16':'少年少女日本の歴史16 幕末の風雲 江戸時代末期',
'https://kids-km3.shogakukan.co.jp/books/nichireki17':'少年少女日本の歴史17 明治維新 明治時代前期',
'https://kids-km3.shogakukan.co.jp/books/nichireki18':'少年少女日本の歴史18 近代国家の発展 明治時代後期',
'https://kids-km3.shogakukan.co.jp/books/nichireki19':'少年少女日本の歴史19 戦争への道 大正時代・昭和初期',
'https://kids-km3.shogakukan.co.jp/books/nichireki20':'少年少女日本の歴史20 アジアと太平洋の戦い 昭和前期',
'https://kids-km3.shogakukan.co.jp/books/nichireki21':'少年少女日本の歴史21 現代の日本 昭和後期・平成',
'https://kids-km3.shogakukan.co.jp/books/nichirekia1':'少年少女日本の歴史別巻1 人物事典 日本史で活躍した人びと',
'https://kids-km3.shogakukan.co.jp/books/nichirekia2':'少年少女日本の歴史別巻2 史跡・資料館事典 日本史の舞台をたずねてみよう',
'https://kids-km3.shogakukan.co.jp/books/nichirekia3':'少年少女日本の歴史 日本の歴史 平成の30年'
]
books.each {url, title ->
println(title)
Browser.drive {
go url
sleep(1000)
// open menu
$('div#menu_btn').click()
// get number of pages
def pages = Integer.parseInt($('div#page_indicator')?.text().split(' ')[2])
// close menu
$('div#menu_btn2').click()
// get encoded iamges in data URI
def list = []
(0..(pages-1)).each { page ->
list << $('img#right_img')?.@src
list << $('img#left_img')?.@src
$('div#tap_left_area').click()
sleep(250)
}
// decode data & save iamges
list.eachWithIndex { dataUri, index ->
if(dataUri?.startsWith('data:') && dataUri.split(',').size() == 2) {
def encodedImage = dataUri.split(',')[1]
new File(title).mkdir()
new File("${title}/page-${index}.jpg").bytes = Base64.getDecoder().decode(encodedImage)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment