Seleniumを使用して自動化を行っていく時に必ず直面する問題の1つはシステムへのログイン処理をどうするかということです。
処理の中で自動的に入力する場合もあるかもしれませんがセキュリティ上どうかということもありそこはその都度ユーザー側が手入力するような場合がいいこともあります。
ここでは自動化処理の中でログイン画面をユーザー側が手入力するようなやり方でやる場合の方法例を紹介したいと思います。
今回の例としては、ある対象の画面に展開しようとするとURLの異なるログイン画面が表示されユーザーがログインするとログイン画面とはURLの異なる対象画面に画面展開するような場合での例となります。
実際に行った処理としては以下のようになります。
driver.get(URL_A)
targetUrl = URL_A
start = time.time()
while driver.current_url != targetUrl:
if time.time() - start > 30:
print('タイムアウトエラー')
messagebox.showinfo('メッセージ','タイムアウトエラー')
sys.exit()
time.sleep(1)
driver.get(URL_B)
1行目でURL_Aの対象画面に展開しようとすることでログイン画面が表示されるものとします。
これを2行目でtargetUrlとして記憶しておきます。
3行目でスタート時刻を記憶しておいた上で4行目のwhile分でカレントURLが先程記憶したtargetUrlと同じかどうか繰り返し比較します。
一致していない時はまだログイン画面表示中なので繰り返しループを回ることとなり5行目で時刻がスタート時刻から30秒以上経過していたらタイムアウトエラーを表示して抜けるようにしています。
30秒以内にログイン入力された時はカレントURLがtargetUrlと一致することになるのでwhileループを抜けその後それ以降の処理(上記例ではURL_Bへの画面展開)に進んでいます。
これにより、対象画面を表示しようとした時にログイン画面が表示されURLの一致不一致をチェックすることでログインしたかどうかをチェック後それ以降の処理に進んでいくような処理が実現できます。