Seleniumでログインが必要なシステムから複数ページを跨いでデータを採取する


毎日特定の社内システムにログインしてデータを採取し、確認するのだが、
複数ページにまたいでのデータ採取であり面倒なため、スクレイピングで自動でデータ集めができないか実施した。
Seleniumでログインして、欲しいデータのタグからデータをリストにまとめる。

ライブラリをインポート

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

ウェブブラウザがIEであるため、IEDriverServer.exeを同じ階層にダウンロード
階層が違う場合はアドレスを指定する。
入力する場所のidタグをdriver.find_element_by_idで探索し、send_keysでIDとPASSを入力して、click()にてログインする。

URL="ログインページのアドレス"
driver = webdriver.Ie('IEDriverServer.exe')
driver.get(URL)

ID=""
PASS=""

driver.find_element_by_id('IDを入力するスペースのid').send_keys(ID)
driver.find_element_by_id('passwordを入力するスペースのid').send_keys(PASS)
driver.find_element_by_id('loginボタンのid').click()

matome=[]
blank=""

driver.find_element_by_idで欲しいidのデータをスクレイピングできる
ここではページの遷移も伴うので、driver.getでページを移動する。
ページの読み込みを待たないとErrorになるので、WebDriverWaitでidが読み込めるまで待つ

ページその1
driver.get("ページその1のアドレス")

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'data_1_id')))

data_1=driver.find_element_by_id("data_1_id").text
data_2=driver.find_element_by_id("data_2_id").text
data_3=driver.find_element_by_id("data_3_id").text
data_4=driver.find_element_by_id("data_4_id").text

for i in (data_1,data_2,data_3,data_4):
    matome.append(i)

ページ2
driver.get("ページ2のアドレス")

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'data_5_id')))

data_5=driver.find_element_by_id("data_5_id").text
data_6=driver.find_element_by_id("data_6_id").text
data_7=driver.find_element_by_id("data_7_id").text

for i in (data_5,data_6,data_7):
    matome.append(i)   

for n in matome:
    print(n)

実際はこれがページ5つ分あるが、これ以降は同じものの繰り返し。
これで自動で複数ページのデータをまとめてくれる