1

Selenium WebDriverを使用して、ユーザー名とパスワードでサイトに自動的にログインしようとしています。私は調査を行いましたが、この機能が WebDriver でサポートされているとは思わないため、別の方法を見つける必要があります。ログインを自動化しようとしているサイトはhereにあります。

ログインを求めるプロンプトが表示されると、ブラウザの一部ではないポップアップ ウィンドウが表示されます。Firefox と Chrome を使用しています。Windows API が必要なようです。URL で資格情報を渡そうとしましたが、うまくいきませんでした。sendkeys も試しましたが、アプリケーションが Windows メッセージを受け入れていないという Windows 例外を受け取りました。handle現在の使用を切り替えてみましたdriver.windowhandlesが、ポップアップは新しいハンドルではないようです。

誰にもアイデアはありますか?私はちょっと立ち往生しています。ポップアップ ウィンドウを表示するための準備コードは次のとおりです。

IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.portal.adp.com");
string currentWindow = driver.CurrentWindowHandle;
IWebElement userLogin = driver.FindElement(By.Id("employee"));
userLogin.Click();
4

4 に答える 4

4

表示されているポップアップは、Web サーバーによってプロンプトが表示され、認証プロンプトです。Selenium はこの操作をサポートしていません。

この制限を処理する方法の 1 つは、次のように URL でユーザーとパスワードを渡すことです。

http://user:password@example.com

ここで入手可能な詳細情報: http://aleetesting.blogspot.in/2011/10/selenium-webdriver-tips.html

于 2012-08-07T05:35:38.637 に答える
2

私はそれを解決したと思うので、そこに私の答えが欲しかった. この回答では、URL を介して資格情報を渡す必要はありません (私のことを気に入らない方のために)。また、カスタムの Firefox プロファイルや拡張機能をインストールする必要も、ソリューションに含める必要も、ブラウザーにインストールする必要もありません。これにより、マシン間の互換性の問題が解消されます。

私の問題は、ログインがプロキシの背後にあるため、URL を介して資格情報を渡すことによって認証を完了できないことでした。

そこで、Windows 自動化ツールキットに目を向け、AutoIT を見つけました。AutoIT と Selenium を使用すると、表示されるウィンドウ ダイアログにユーザー名とパスワードを送信することで、自動的にログインできます。方法は次のとおりです (以下の手順は c# 用であることに注意してください。

1 - http://www.autoitscript.com/site/autoit/downloads/から AutoIT をダウンロードします。

2 - autoit .dll をプロジェクト参照に追加します。

参照を右クリックし、[参照の追加] を選択します。次に、参照ボタンをクリックして dll の場所を参照し (ほとんどのデフォルト インストールでは c:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dll)、プロジェクトに追加します。

3 - 次のように AutoIT と Selenium を使用します (Web ドライバーが既に初期化されていると仮定します)。

    //Initialize AutoIT
    var AutoIT = new AutoItX3();

    //Set Selenium page load timeout to 2 seconds so it doesn't wait forever
    Driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));

    //Ingore the error
    try
    {
      Driver.Url = url;
    }
    catch
    {
      return;
    }

    //Wait for the authentication window to appear, then send username and password
    AutoIT.WinWait("Authentication Required");
    AutoIT.WinActivate("Authentication Required");
    AutoIT.Send("username");
    AutoIT.Send("{TAB}");
    AutoIt.Send("password");
    AutoIT.Send("{ENTER}");

    //Return Selenium page timeout to infinity again
    Driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(-1));

とにかく、それだけです、そしてそれは魅力のように機能します:)

また、シーケンス「{x}」を使用して AutoIT でエスケープする必要がある特殊文字がいくつかあることにも注意してください。たとえば、パスワードが「!tRocks」の場合、それを「{!}tRocks」として AutoIT に渡す必要があります。

楽しい自動化。

于 2014-02-28T20:00:02.350 に答える
0
   FirefoxProfile profile = new FirefoxProfile();
   profile.SetPreference("network.http.phishy-userpass-length", 255);
   profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", hostname);
   Driver = new FirefoxDriver(profile);

hostname はあなたの URL (example.com) です。

Driver.Navigate().GoToUrl(http://user:password@example.com);
于 2013-06-03T14:25:17.613 に答える
0

まさにこのような状況を処理することになっているプロトタイプ プロジェクトの作業が完了しました。

人気のあるオープン ソース プロキシである BrowserMob を利用して認証を実行します。

SeleniumBasicAuthWrapper お 役に立てば幸いです! これはまだ進行中の作業ですが、近い将来、ねじれや欠陥が解決されることを願っています。

于 2014-05-17T02:00:18.933 に答える