WebDriver (IE) で Basic認証 を行う。
元ネタ:Chrome 及び IE の WebDriver で Basic 認証を突破する方法 - QA@IT
回答は、元ネタの方に書いたので詳細は省きます。下記サイトを参考に!
Alek's Blog: Selenium WebDriver tips
Internet Explorer does not support user names and passwords in Web site addresses (HTTP or HTTPS URLs)
というわけで、実際に動かしてみた。
NuGet で Selenium.WebDriver (Ver 2.29.1) を入れて…
using OpenQA.Selenium.IE; using System; class Program { static void Main(string[] args) { using (var d = new InternetExplorerDriver()) { d.Navigate().GoToUrl("http://<Basic認証のサイト>/"); Console.ReadKey(); d.Quit(); } } }
ダイアログが出て、先に進めません。
ちなみに、このダイアログは Modal ダイアログなので、Alert と同じ要領で取得出来ます。
var dialog = WebDriver.SwitchTo().Alert();
IAlert の SendKeys で入力可能でしたが、ユーザー名しか入力出来ません。{TAB} とか送っても パスワードText には、フォーカス移らず。
また、Accept や Dismiss でも OK ボタンやキャンセルボタンを押した扱いにならずお手上げ…。
ユーザー/パスワードを URL に設定すると、
using OpenQA.Selenium.IE; using System; class Program { static void Main(string[] args) { using (var d = new InternetExplorerDriver()) { d.Navigate().GoToUrl("http://<user>:<password>@<Basic認証のサイト>/"); Console.ReadKey(); d.Quit(); } } }
ダイアログは表示されなくなりましたが、ページも表示されません。
レジストリ設定後に同じコードでを実行すると、正常に認証後のページが表示されました。
というわけで、回避可能ですね!
ちなみに Chrome でも同じ様に実行出来ました。
using OpenQA.Selenium.Chrome; using System; class Program { static void Main(string[] args) { using (var d = new ChromeDriver()) { d.Navigate().GoToUrl("http://<user>:<password>@<Basic認証のサイト>/"); Console.ReadKey(); d.Quit(); } } }
そして久々に Selenium で IE 動かしたら、IEDriverServer.exe が必要になってた!
Downloads - selenium - Browser automation framework - Google Project Hosting
今回は、WebDriver のコンストラクタに IEDriverServer.exe や chromedriver.exe のパスを指定していないので、実行ファイルと同じ階層に配置して動かしました。
以前の資料Selenium webdriver使ってみようず UPDATE しないとなー。。