【Python】Seleniumでブラウザのログイン処理を自動化する方法





今回はSeleniumで具体的にWEBブラウザを操作する方法について解説します。

Seleniumの基本的な使い方から、ログイン判定やログインの方法についても紹介していきます。

導入方法については別の記事で解説しているので、こちらをご覧ください⬇️

Python selenium インストール 動かすことを目指して解説
この記事ではPythonでSeleniumを使ってみたい人向けに、とりあえず動くまでを目指して解説します。 Seleniumでブラウザの操作を自動化すれば色々なことができるので、導入してみましょう! SeleniumはChromeやFireFoxなどの複数ブラウザに対応していますが、今回はChromeを使っていきます。

 

筆者の環境
・Google Chrome 86.0.4240.75(Official Build) (64 ビット)
・Python 3.8.5
・Selenium 3.141.0
・Chrome Driver 86.0.4240.22

基本的な使い方

今回の解説では例として、楽天を使って文字を解説します。

サナダ
サナダ

まず、「指定のワードを検索する」処理をして操作を学んでみましょう

 

そのために必要な手順は以下の3つになります。

1.楽天の画面を表示する
2.検索ボックスに指定のワードを入力する
3.検索ボタンを押す

 

また、seleniumで入力やクリックなどをするためには、要素を指定して操作する必要があります。
サンプルコードで確認してみましょう。

import time
from selenium import webdriver
 
driver = webdriver.Chrome(executable_path='C:\\Users\\Shinmai\\Documents\\Python\\selenium\\chromedriver_win32\\chromedriver.exe')
# 1.楽天の画面を表示する
driver.get('https://rakuten.co.jp/')
 
time.sleep(2)

# 2.検索ボックスに指定のワードを入力する

#       検索ボックスのCSSセレクタを指定
search_box = driver.find_element_by_css_selector("#common-header-search-input")
#       検索ボックスに入力
search_box.send_keys('イヤホン')

# 3.検索ボタンを押す

#       検索ボタンのCSSセレクタを指定
search_btn = driver.find_element_by_css_selector("#wrapper > div:nth-child(6) > div > div > div > div.flex-search-bar-wrapper--3MkOE > div > div > div > a > span > div")
#       検索ボタンをクリック
search_btn.click()

time.sleep(10) 
 
driver.quit()

このように要素の指定と操作をセットで行います。

要素の指定 element = driver.find_element_by_css_selector(“操作したいセレクタ”)
操作内容  element.click()

 

また要素の指定にはcssセレクタだけでなく、以下の様にHtmlのid,nameなども指定できます。

 

  • id属性: driver.find_element_by_id(“id”)
  • class属性: driver.find_element_by_class_name(“class”)
  • name属性: driver.find_element_by_name(“name”)

 

よく分からない方はcssセレクタが一番簡単だと思うので、次章で詳しく解説します。

CSSセレクタの探し方

サナダ
サナダ

セレクタって言われてもどう探せばいいのか分からないよ!

 

新米先生
新米先生

chromeなら簡単に見つけられるので大丈夫!一緒に見ていきましょう

まず、Chromeで操作したいページを開き、F12キーを押します。

下の画像のような画面が開けたら、赤枠の中をクリックします。

 

そして、その状態で下の画像の赤枠内にある検索ボックスをクリックします。

 

そうするとクリックした部分のhtml要素のみ見れるようになります。(枠内)

①Copy
②Copy selector
と選択するとCSSセレクタがクリップボードにコピーされます。

ログインの有無を判定する

ここではログインボタンのセレクタがあるかどうかで判断してみます。

もしログインボタンのセレクタが見つからなかった場合は、NoSuchElementExceptionというエラーが発生するので
try/exceptでそのエラーをキャッチすることでログイン済みと判定できます。

import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome(executable_path='C:\\Users\\Shinmai\\Documents\\Python\\selenium\\chromedriver_win32\\chromedriver.exe')
driver.set_window_size(1920,1080)
driver.get('https://rakuten.co.jp/')

try:
  # ログインボタンのセレクタ
  selector = '#wrapper > div:nth-child(8) > div > ul.side-menu--37357 > li:nth-child(2) > button'
  element = driver.find_element_by_css_selector(selector)

except NoSuchElementException as e:
  print(e)

time.sleep(10)

driver.quit()

ログイン後の画面を操作する

・会員情報画面を表示する
もし会員情報ページなどログイン後でないと見れない画面を見たい場合は、どうすれば良いのでしょうか?

今度はログインしているかを判断し、未ログインの場合はログインをした上で

会員情報ページに行ってみます。

import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome(executable_path='C:\\Users\\Shinmai\\Documents\\Python\\selenium\\chromedriver_win32\\chromedriver.exe')
driver.set_window_size(1920,1080)
driver.get('https://rakuten.co.jp/')

try:
    # ログインボタンのセレクタ
    selector = '#wrapper > div:nth-child(8) > div > ul.side-menu--37357 > li:nth-child(2) > button'
    element = driver.find_element_by_css_selector(selector)
    element.click()

    # id
    selector = '#loginInner_u'
    element = driver.find_element_by_css_selector(selector)
    element.send_keys("test_rakuten@example.com")
    # パスワード
    selector = '#loginInner_p'
    element = driver.find_element_by_css_selector(selector)
    element.send_keys("Password001")
    # 送信
    selector = '#loginInner > p:nth-child(3) > input'
    element = driver.find_element_by_css_selector(selector)
    element.click()

except NoSuchElementException as e:
    print(e)
# 以下ログイン後画面

# 会員情報画面のセレクタ
selector = '#members_info > ul > li:nth-child(1) > a'
element = driver.find_element_by_css_selector(selector)
element.click()

time.sleep(10)

driver.quit()

最後に

今回はSeleniumで具体的に操作する方法を紹介しました。

他にも様々な使い方ができるので、色々試してみて下さい。

それでは良きSeleniumライフを!



コメント

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