【python】seleniumのスクレイピングでログイン処理を実装する方法

本ページには PR が含まれます。

スクレイピングでログインを自動化するには
どうしたらいいの?

今回はseleniumライブラリを使って、Webサービスへのログインを自動化する方法を紹介します。


サンプルコードをコピペしながらサクサク処理を試せるので、ぜひ参考にしてみてください。

seleniumライブラリの基本的な使い方を知りたい方はこちら

Pythonの実践的なWebスクレイピング技術について学びたいという方に向けてUdemy学習コースを公開しています。

10/27(金)までの 90%OFFクーポンで Webスクレイピングを学べる!!

30日間返金保証

すぐにでもスクレイピング技術を活かせるようになりますよ!


目次

ライブラリのインストール

はじめにWebスクレイピングに必要なseleniumライブラリをインストールします。

コマンドプロンプト(Windows)もしくはターミナル(macOS)で以下を実行します。

pip install selenium

コンソールの最終行に「Successfully Installed 〜〜〜」と表示されていればインストールは成功です。


Chromeドライバーのダウンロード

seleniumによるWebスクレイピングでは、Webブラウザを操作するために「Chromeドライバー」のダウンロードが必要です。

ダウンロード方法は以下の通り。

  1. Google Chromeのバージョン確認
  2. バージョンを指定してダウンロードサイトからダウンロード

Google Chromeのバージョン確認

ChromeDriverをダウンロードする前にご自身の使用するGoogle Chromeのバージョンを確認します。

ChromeDriverとGoogle Chromeのバージョンが一致していないとエラーが発生する可能性があります。

Google Chromeを起動して、右上のメニューマークをクリックします。

「ヘルプ」から「Google Chromeについて」をクリックするとバージョンを確認できます。

のちほどChromeのバージョン情報を指定してChromeドライバーをダウンロードします。


ダウンロードサイトからインストール

Google Chromeのバージョンが確認できたら、さっそくChromeドライバーをインストールしましょう。

こちらのサイトから無料でダウンロードできます。

>> ChromeDriverダウンロードページ

先ほど確認したバージョンと一致するものを選択し、PCのOSに合ったダウンロードリンクをクリックします。

バージョン番号の先頭二桁が合っていればOKです。

ダウンロードされたzipファイルをダブルクリックで解凍します。

「chromedriver」という実行ファイルが確認できればChromeDriverのインストールは完了です!!

Chromeドライバーをインストールできたら、Webスクレイピングの準備は完了です。

seleniumでWebページにアクセス

ここでは技術ブログQiita(キータ)のアカウントページにログインしてみましょう。

seleniumを使ってQiita(キータ)のトップページにアクセスします。

ポイント

seleniumライブラリを使ったWebページへのアクセス方法

dirver.get(url="アクセス先のURL")

サンプルコード

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service as fs

# chromedriverのパスを指定
driver_path = "/Users/「PCのユーザ名」/Downloads/chromedriver"
chrome_service = fs.Service(executable_path=driver_path)
driver = webdriver.Chrome(service=chrome_service)

# Qiitaトップページにアクセス
url = "https://qiita.com/"
driver.get(url=url)

このようにWebブラウザでQiitaのトップページにアクセスできました。


seleniumでログインボタンをクリック

続いてQiitaのトップページ右上にある「ログイン」ボタンをクリックする処理を作りましょう。

ログインボタンをクリックする処理

まずはChromeの「検証」機能を使って「ログインボタン」のHTMLを調べます。

ブラウザをアクティブにして「F12」キーを押下します。

これで「ログインボタン」のHTML構造を参照できます。

続いて参照されたHTMLの部分を右クリック。そのまま「Copy」→「Copy selector」を選択します。

これで「ログインボタン」を特定するためのCSSセレクタを取得できました!

このCSSセレクタをつかってseleniumで「ログインボタンを探索」→「クリック」させます。

ポイント

CSSセレクタからWeb要素を探索する方法

driver.find_element(by=By.CSS_SELECTOR, value="CSSセレクタの値")

seleniumをつかったWeb要素のクリック

web要素.click()

※ もしくはdriver.execute_script("arguments[0].click();", web要素)

サンプルコード

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service as fs

# chromedriverのパスを指定
driver_path = "/Users/「PCのユーザ名」/Downloads/chromedriver"
chrome_service = fs.Service(executable_path=driver_path)
driver = webdriver.Chrome(service=chrome_service)

# Qiitaトップページにアクセス
url = "https://qiita.com/"
driver.get(url=url)

############### ここからログインボタンをクリックする処理 ###############
# コピーしたCSSセレクタを文字列に格納
css_selector = "#New2GlobalHeader-react-component-de90262e-71d7-4bea-9993-96ddaee09cb1 > header > div > div.st-NewHeader_end > a.st-NewHeader_loginLink"
login_button_element = driver.find_element(by=By.CSS_SELECTOR, value=css_selector)

# ログインボタンを構成するHTMLタグを出力
print(login_button_element.get_attribute(name="outerHTML"))

# ログインボタンをクリック
login_button_element.click()
# 別のクリック方法(JavaScriptにクリック処理をさせる。処理が安定しています。)
# driver.execute_script("arguments[0].click();", login_button_element)

出力結果

<a class="st-NewHeader_loginLink" href="/login?redirectTo=%2F" rel="nofollow">ログイン</a>

このようにログインボタンをクリックして、ログイン画面へ遷移できました。


seleniumでログイン情報の入力

つづいてseleniumを使ってログイン用の入力ボックスに情報を入力させます。

入力ボックスのCSSセレクタからWeb要素を特定します。もう一度「F12」キーでHTMLを参照しましょう。

参照された入力ボックスのHTMLからCSSセレクタをコピーします。

CSSセレクタをコピー
# コピーした「ユーザー名 または メールアドレス」入力欄のCSSセレクタを文字列に格納
input_user_selector = "#identity"

同じようにして「パスワード」入力欄のCSSセレクタもコピーします。

パスワード入力ボックスのCSSセレクタを探索

参照された「パスワード」入力ボックスのHTMLからCSSセレクタをコピーします。

# コピーした「パスワード」入力欄のCSSセレクタを文字列に格納
input_password_selector = "#password"

これでログイン情報を入力の準備ができました!

さっそくseleniumでログイン情報を入力させてみましょう。

ポイント

seleniumで入力ボックスにテキストを入力

web要素.send_keys("入力する文字列")

サンプルコード

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service as fs

# chromedriverのパスを指定
driver_path = "/Users/「PCのユーザ名」/Downloads/chromedriver"
chrome_service = fs.Service(executable_path=driver_path)
driver = webdriver.Chrome(service=chrome_service)

url = "https://qiita.com/"
driver.get(url=url)

css_selector = "#New2GlobalHeader-react-component-de90262e-71d7-4bea-9993-96ddaee09cb1 > header > div > div.st-NewHeader_end > a.st-NewHeader_loginLink"
login_button_element = driver.find_element(by=By.CSS_SELECTOR, value=css_selector)

login_button_element.click()

############### ここからログイン情報を入力する処理 ###############

# コピーした「ユーザー名 または メールアドレス」入力欄のCSSセレクタを文字列に格納
input_user_selector = "#identity"
# コピーした「パスワード」入力欄のCSSセレクタを文字列に格納
input_password_selector = "#password"

input_user_element = driver.find_element(by=By.CSS_SELECTOR, value=input_user_selector)
# 「ユーザー名 または メールアドレス」を入力
input_user_element.send_keys("あなたのユーザ名")

input_password_element = driver.find_element(by=By.CSS_SELECTOR, value=input_password_selector)
# 「パスワード」を入力
input_password_element.send_keys("あなたのパスワード")

実行結果

このようにseleniumで入力ボックスに情報をテキストを入力できました!


seleniumでログイン情報をPOST・送信

最後にseleniumでログインを実行しましょう。

ログイン情報の送信手段は以下二つのいずれかです。どちらでもログイン可能です。

  1. 「Qiitaにログイン」ボタンをseleniumでクリック
  2. 入力済みのinputタグのWeb要素にsubmit()メソッドを利用

①の方法は「CSSセレクタを特定→クリック」でこれまでと同じ方法ですので、

②の方法で実装してみましょう。②の方がシンプルです。

サンプルコード

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service as fs

# chromedriverのパスを指定
driver_path = "/Users/「PCのユーザ名」/Downloads/chromedriver"
chrome_service = fs.Service(executable_path=driver_path)
driver = webdriver.Chrome(service=chrome_service)

url = "https://qiita.com/"
driver.get(url=url)

css_selector = "#New2GlobalHeader-react-component-de90262e-71d7-4bea-9993-96ddaee09cb1 > header > div > div.st-NewHeader_end > a.st-NewHeader_loginLink"
login_button_element = driver.find_element(by=By.CSS_SELECTOR, value=css_selector)

login_button_element.click()
input_user_selector = "#identity"
input_password_selector = "#password"
input_user_element = driver.find_element(by=By.CSS_SELECTOR, value=input_user_selector)
input_user_element.send_keys("あなたのユーザ名")
input_password_element = driver.find_element(by=By.CSS_SELECTOR, value=input_password_selector)
input_password_element.send_keys("あなたのパスワード")

############### ここからログイン情報を送信POSTする処理 ###############
input_password_element.submit()
# 以下でも可
# input_user_element.submit()

実行結果

アカウントページに遷移

このようにログイン完了して、アカウントトップに遷移できました!


まとめ

この記事ではseleniumライブラリを使ったスクレイピングで「ログイン処理」を実装する方法をご紹介しました。


Webスクレイピングをマスターすると、情報収集が圧倒的にラクになります。

  • 仕事で毎日行うデータ収集
  • 予約サービスへの自動登録・応募
  • ショッピングサイトの価格監視

などなど、さまざまな分野で応用できます。

PythonのWebスクレイピング技術を体系的に学びたい、という方に向けてUdemyで動画学習コースを公開しているので、ぜひ活用してみてください!!

Webスクレイピング技術を動画で一気に学べる!!

Webスクレイピングで日々の作業を自動化し、より有意義な時間を増やしましょう!!


他にもPythonのWebスクレイピング技術の活用方法を紹介しているので、ぜひ参考にしてみてください。

よかったらシェアしてね!
目次