img

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
2
3
4
5
6
FROM selenoid/vnc_chrome:87.0

# 設定ファイル(json)を追加
RUN mkdir -p /etc/opt/chrome/policies/managed/
RUN echo '{ "URLWhitelist": ["my-scheme://*"] }' > /etc/opt/chrome/policies/managed/whitelist.json
RUN echo '{ "URLBlocklist": ["my-scheme://*"] }' > /etc/opt/chrome/policies/managed/blocklist.json

Windowsの場合、この設定はレジストリにあったりするみたいです → 参考サイト: Chromeで外部プロトコルダイアログの設定をリセットする - Qiita

補足: 前回の記事

以前にも、Seleniumで「Open xdg-open?」ダイアログが制御出来ない件について調べたメモ | 7meという記事を書いていて、前回の user-data-dirを使う方法でも解決は出来るんですが、よりピンポイントに解決出来る方法を今回見つけたので記事にしてみました