Seleniumでログインが必要なサイトをクローリングする

※当サイトはアフィリエイト広告を利用しています

データ分析

Seleniumでログインが必要なサイトのクローリング方法についてご紹介

Seleniumの導入

Seleniumのライブラリインストール、Chromedriverのダウンロードを行ってください。
詳しくはこちらの記事ご参照ください

ログインページを開く

今回はYahoo!のログインページでログインすることを実践してみたいと思います。

from selenium import webdriver

driver_pass = 'C:/Users/XXXXX/chromedriver.exe' #Chromedriverの保存先を指定

#v3系の場合
driver = webdriver.Chrome(executable_path = driver_path)

#v4以降の場合
service = Service(executable_path = driver_path)
driver = webdriver.Chrome(service = service)


url = 'https://login.yahoo.co.jp/config/login' #対象のURLを指定
res = driver.get(url)

入力欄、ログインボタンを探す

Chromeで対象ページを開きF12を押すとデベロッパーツールモードが起動します。

デベロッパーツールの左上の矢印アイコンをクリックすると、ページ内の要素を選択できるようになり、選択した要素がデベロッパーツール内のソースコードで選択されます。

今回値を入力したい入力欄を選択し、デベロッパーツール上のソースコードを右クリック。
「コピー > 完全なXPathをコピー」を選択。

入力欄を選択する際は「<input ~~~」ボタンの場合は「<button ~」となるように要素そのものを選択するようにしましょう。要素のラッパーとなるdivなどを選択しないように注意。

例えばYahoo!のログインページの入力欄のXPathは下記のようになります

/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/dl/dd/input

同様にしてボタンのXPathも取得する

/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/div/button

値を入力、ボタンをクリックする

seleniumの仕様が変わり、バージョンが3系と4系で記述方法が変わります。
Seleniumのバージョンを確認する場合は「pip show」で表示されます

pip show selenium

# Name: selenium
# Version: 4.7.2
# Summary: 
# Home-page: https://www.selenium.dev

バージョンが3系の場合は「.find_element_by_xpath(~~)」を、4系の場合は「.find_element(By.XPATH, ~~~)」を使います。
今回は4系のバージョンのため後者を利用しました。

login_id = 'login-id' #指定のIDを設定
login_pass = 'login-pass' #指定のパスワードを設定 

#ver3系の場合
from selenium.webdriver.support.select import Select

elem_id = brouser.find_element_by_xpath("/html/body/login-page/div/main/login/section/div/div/div/dl/dd[2]/input")
elem_id.send_keys(login_pass)
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/div/button").click()


#ver4系の場合
from selenium.webdriver.common.by import By
elem_id = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/dl/dd/input")
elem_id.send_keys(login_id)
driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/div/button").click()

入力欄のXPathを「.find_element」でページ上の要素を選択し、その要素に対して「.send_keys(~~)」でキーワードを入力します。
同じくボタンのXPathを選択し、「.click()」でクリックの動作をします。

フルXPathが長いのでなんだかややこしそうな内容になっていますが単純化すると下記の通りで簡単な内容になります。

elem_id = driver.find_element(By.XPATH, "input_XPath")
elem_id.send_keys(login_id)
driver.find_element(By.XPATH, "button_XPath").click()

同じようにパスワードについても入力欄を設定し、ボタンをクリックすればログインが完了します。

この記事を読んだ人がよく見ています

タイトルとURLをコピーしました