SeleniumでWebサイトを攻略している時に出くわしたこのプロンプトがSeleniumで操作出来ず、解決方法を調べたのでメモ
環境
- selenium 3.141.0
- selenoid 1.10.0
- Robotframework 3.2.2
- Robotframework SeleniumLibrary 4.5.0
- Google Chrome 88
- Docker 20.10.2
xdg-openって何
xdg-open
は、Linuxでデフォルトアプリケーションを開くためのコマンドで、Windowsで言う所の start
、macOSの open
みたいなもの、という事で把握 参考
原因
調べたところ、Webサイトで利用されている、カスタムURLスキーム(例えば、 mailto:xxxx
とか twitter:xxxx
とか。他には、このページでいう、 myphotoapp:xxxx
みたいなやつ)を xdg-open
が開こうとして、その開く許可を確認しにきてる、という認識
今回の自分の場合、selenoid/vnc_chromeをブラウザイメージとして使用していたため、OSがDebianベースであった事と、アクセスしたページのJSが、その企業の独自のカスタムURLスキームと通信を行っていたため、このプロンプトによりSeleniumの動作が阻害されていた
消せないの?
一見、SeleniumLibraryのHandle Alertとかで消せそうな気もするが、JSとかで表示させる「ダイアログ」と違い、これはChromeが出している「プロンプト」のため、Seleniumでは操作出来ない
対処
Dockerの場合、Chromeコンテナ(selenoid/vnc_chrome)の URLWhiteList
、および、 URLBlockList
に、原因となっているカスタムURLスキーム(例: my-scheme
)を登録してビルドします
1 | FROM selenoid/vnc_chrome:87.0 |
Windowsの場合、この設定はレジストリにあったりするみたいです → 参考サイト: Chromeで外部プロトコルダイアログの設定をリセットする - Qiita
補足: 前回の記事
以前にも、Seleniumで「Open xdg-open?」ダイアログが制御出来ない件について調べたメモ | 7meという記事を書いていて、前回の user-data-dir
を使う方法でも解決は出来るんですが、よりピンポイントに解決出来る方法を今回見つけたので記事にしてみました