🐕

Seleniumで認証が必要な画面をスクレイピングしてみた

2024/11/11に公開

はじめに

こんにちは!
記事を読んで下さり、ありがとうございます。
はじめまして、今回初投稿で少し緊張しているぽこさん🐶です。

スクレイピング対象のWebページを表示するため、Seleniumを使って自動ログインを試みましたが、
ユーザーIDとパスワードだけではログインできませんでした。というのも、二段階認証が必要な画面だったからです。
例えば、以下の画像のように「Googleでログイン」後にパスワードやIDの入力が必要となる形式です。

二段階認証を回避し、既に認証された状態(ログイン後の画面)でWebページが表示させる方法を今回記事にまとめてみました。

対象読者

Seleniumで認証が必要な画面のスクレイピングを検討している方

開発環境

Windows11
Chrome: 130.0.6723.117(Official Build) (64 ビット)

> python -V
Python 3.12.5
> pip list 
Package            Version
------------------ -----------
pip                24.2
selenium           4.25.0
webdriver-manager  4.0.2

スクレイピングする前に注意事項

  • スクレイピングを禁止サイト
    • スクレイピングをする際、利用サイトの規約を確認してください。
  • アクセス頻度が多い場合
    • スクレイピングで大量アクセスすると不正アクセスと見なされる場合があります。
  • 著作権の尊重
    • スクレピングしたデータに著作権で保護されている場合があります。

本文

二段階認証の自動ログインするのは難易度が高かったため、今回はChromeのプロファイル情報を事前に取得しドライバに設定することで、ログイン状態でスクレイピングをする方法にしました。

事前準備

Chromeの認証情報を取得するため、アドレスバーにchrome://version/を入力する。
表示されたプロフィールパスを事前にメモ帳などに控えておく。
ex. C:\Users\UserName\AppData\Local\Google\Chrome\User Data

認証済みのWebページを取得する方法
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Chromeのドライバ設定
options = webdriver.ChromeOptions()
# 事前準備で取得したプロファイル情報を持ったパスの一つ上を指定する。
# \は特殊文字になるので、\\でエスケープしておく
profileFolder = '--user-data-dir=C:\\Users\\UserName\\AppData\\Local\\Google\\Chrome\\User Data'
options.add_argument(profileFolder)

# Chromeのドライバを取得
service = Service(executable_path=ChromeDriverManager().install())
browser = webdriver.Chrome(options=options, service=service)

# ログインページにアクセス
url_login = "スクレピング対象のURLを設定"
try:
    browser.get(url_login)
    # Webページのスクレピング処理
finally:
    driver.close()
    driver.quit() 

最後に

いかがだったでしょうか?
もし他に何か気づいた点があればコメント頂けると嬉しいです~!

Discussion