10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Seleniumを使ってアラートポップアップ画面に2つの文字列を入力する方法

Posted at

問題

下のように、ウェブサイトにアクセスした際にポップアップで認証情報(ユーザ名とパスワードの2つ)を要求される。
2つ入力がある場合の対応方法がわからなかったので調べてみた。

AuthenticationRequired.jpg

結論としては、Tabを入れるという原始的な方法でクリアしました。試してませんが、3つ以上の複数でも同じやり方でできそうです。

解決策

環境

ホストマシン: Windows10
Python: 3.7
Selenium: 3.141
Driver: geckodriver_v0.23-win64.exe
Browser: Firefox 67.0b5 (32-bit)

既存の解決策調査

そもそもこの画面はSelenium的にはalertというオブジェクトのPromptというタイプになるらしい。
alertオブジェクトへの操作については、こちらが参考になりました。
ただ、2つ入力枠があるものに関するやり方がなかなか見つけられず。

Stack Overflowのこちらが全く同じことで悩んでいたが、以下のような回答をされていた。

The problem is Selenium cannot identify the authentication popups. That is a limitation of Selenium as far as I know. You can overcome the issue with using java Robot actions to fill out the username and password.

つまりSelenium単体ではできず、RPA的なことを組み合わせる必要があるらしい。
その下ではauthenticateというメソッドでできるとあったが、公式を見ても見つけられず。

You can try this:
driver.switch_to.alert.authenticate('cheese', 'secretGouda')

自分の場合

RPA組み合わせるとかつらいので、入力時にTABを入れることでクリアしました。
TABの入力については公式で確認。

# 認証画面が出てきたら、alertオブジェクトにスイッチ
obj = driver.switch_to.alert
# 1つ目の入力と2つ目の入力の間にTABを入れる。
obj.send_keys(USERNAME + u'\ue004' + PASSWORD)
# 最後にOKを押す。
obj.accept()

補足としてalertというオブジェクトに関しては、OK、Cancel、(Promptの場合)入力という3つの要素しか想定していないようで、場合によってOKは「承認」とか「Accept」とか別の表現をされているケースもあるようですが、全てaccept()というメソッドでクリックできるようです。send_keysに関してもalertだけ指定すればよいみたい。

10
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?