pythonでWebサイトに自動ログイン


はじめに

pythonを使用してWebサイトに自動ログインするプログラムを作ってみました。
seleniumを使用。
geckodriverを使用してFireFoxを制御します。

複数のサイトにログインすることを想定して作成してます。
1サイト目は、ログイン後にボタン押下が必要なサイトを想定。対象の検索してクリック。
2サイト目は新規タブで開いてログイン。

なお、投稿者は、pythonを勉強して日が浅いです。
Qiitaの投稿も初です。技術レベルは低いです。

環境

OS 言語 ブラウザ
windows10 python3.7 FireFox

事前準備

driverの入手

ドライバーを下記から入手する。
https://github.com/mozilla/geckodriver/releases

入手したdriver(geckodriver.exe)をpathが通っている場所に配置

PCの環境設定とかする。省略。

seleniumuのインストール

pip install selenium

コーディング


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

browser = webdriver.Firefox()
type(browser)

#Webサイト1 ユーザー名・パスワード入力欄はtextBoxでid有り
browser.get('Webサイト1')
usr_name_el = browser.find_element_by_id('対象のID')
usr_name_el.send_keys('ユーザー名')
usr_pass_el = browser.find_element_by_id('対象のID')
usr_pass_el.send_keys('パスワード')
usr_pass_el.submit()
#ログイン後、あるボタンを押してトップページ遷移させたいサイトのため下記コード。 aタグでクラス名有り
WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.CLASS_NAME, "対象のクラス名")))
link_el = browser.find_element_by_class_name("対象のクラス名")
type(link_el)
link_el.click()

#Webサイト2 
#ユーザー名入力欄はtextBoxでid有り、パスワードはidとclassが無いのでxpathで検索
browser.execute_script( 'window.open()' ) #新規タブ開く
browser.switch_to.window(browser.window_handles[-1]) #新規タブに移動
browser.get('Webサイト2')
usr_name_el = browser.find_element_by_id('対象のID')
usr_name_el.send_keys('ユーザー名')
usr_pass_el = browser.find_element_by_xpath('対象のパス。開発者ツールからコピーするのが楽')
usr_pass_el.send_keys('パスワード')
usr_pass_el.submit()

参考にしたもの

要素の見つけ方
https://selenium-python.readthedocs.io/locating-elements.html

おわりに

プログラムでブラウザの制御が思ったより簡単に出来たので、
仕事で毎日ログインするようなサイトの自動化をしてみようと思います。