Seleniumを使用してログインが必要なWebサイトの画像を取得する

こんにちは。

今週は「アルフレッド・アドラー 人生に革命が起きる100の言葉」を読みました。その中で突き刺さった言葉があったので、自分のブログだし(笑)残しておこうと思います。

「やる気がなくなった」のではない。
「やる気をなくす」という決断を自分でしただけだ。
「変われない」のではない。
「変わらない」という決断を自分でしているだけだ。

引用:アルフレッド・アドラー 人生に革命が起きる100の言葉 著:小倉 広

mami
うっ・・・

って感じでしたが、とても晴れやかなスッキリした気分になりました。すごく読みやすいので大変お勧めです。

さて、余談が長くなりましたが、今週はコンピュータビジョン理論の勉強が出来なくて、軽めのスクレイピングのプログラムをご紹介しようと思います。今やデータ集めに欠かせない重要なものですが、これ自体はあまり知識が増えた感じがしないので、あまり好きではないんですけど、でもうまくいった時は、プログラミングしていて良かったな、と思える、なんだか不思議な。(やっぱり今日変だな・・・)

ログインが必要なWebサイトのスクレイピング概要

Seleniumというブラウザを自動で操作することがツールを利用してログインした後に欲しい画像のURLからダウンロードします。また、Seleniumは市場で主要なブラウザの全てをWebDriverを使うことでサポートしています。WebDriverとはAPI群とプロトコルです。

私はChromeユーザですので、以下から取得します。最近Chromeのバージョンが上がって、それに合わせてWebDriverも更新する必要がありました。
https://chromedriver.chromium.org/downloads

FireFox等別のブラウザをお使いの方は、以下サイトが参考になると思います。
https://www.selenium.dev/documentation/ja/getting_started_with_webdriver/browsers/

ソースコード

from selenium import webdriver
import time

# ブラウザを表示しないで起動
options = webdriver.ChromeOptions()
options.set_headless(True)
options.add_experimental_option("prefs", {
  "download.default_directory": r"C:\Users\mami\XXXXX\XXXXX",
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})
driver = webdriver.Chrome(executable_path="C:\XXXXX\chromedriver.exe", chrome_options=options)

# ログイン用URL
driver.get('https://XXXXX')
time.sleep(1)

# ログイン(サイトによって変わる)
driver.find_element_by_name('login').send_keys('XXXXX')
driver.find_element_by_name('password').send_keys('XXXXX')
driver.find_element_by_name('loginbtn').click()
time.sleep(5)

# 画像取得
imgurl = "https://XXXXX.jpg"
driver.get(imgurl)
filename = "data.jpg"

# ダウンロード実行用スクリプトを生成&実行
script_str = """
window.URL = window.URL || window.webkitURL;
    
var xhr = new XMLHttpRequest(),
a = document.createElement('a'), file;
    
xhr.open('GET', '""" + imgurl + """', true);
xhr.responseType = 'blob';
xhr.onload = function () {
file = new Blob([xhr.response], { type : 'application/octet-stream' });
a.href = window.URL.createObjectURL(file);
a.download = '""" + filename + """';
a.click();
};
xhr.send();
"""

driver.execute_script(script_str)
time.sleep(1)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)