web-dev-qa-db-ja.com

Seleniumを使用したブラウザー認証の処理

自動化中にSeleniumまたは他のツールを使用してブラウザ認証を処理することを知っていますか?

2015年の編集:

この答えは時代遅れです。今日、WebDriverは認証をサポートしています! Javaを使用してSelenium WebDriverで認証ポップアップを処理する方法 を参照してください。


元の回答:

これは、Seleniumではあまりうまく処理されません。


_http://username:[email protected]/yourpage_を使用して試すことができます

_http://example.com/yourpage_の代わりに

ただし、私が知る限り、Firefoxは確認を求めるブラウザーダイアログをポップアップ表示します。


Java(または AutoIt のような同様のツール)を使用している場合は、 ロボット を試すことができます。


WebDriverを使用している場合は、 driver.manage().addCookie() を使用できます。


または、カスタム FirefoxProfile が既に1回認証に合格しています。

16
Petr Janeček

私はこれに何日も費やしました-文字通り。会社のネットワーク内で過去のブラウザレベル認証を取得して、アプリケーションにアクセスしようとしています。解決策は、URL内の「unsername:password @」コンポーネントを使用することでしたが、ログインURLの最後にスラッシュを追加しました

したがって、合計ログインURLは次のようになります(yourpageの後の「/」に注意してください):

http:// username:[email protected]/yourpage/

Watir、Capybara、Selenium Webdriverで動作します。

5
fra_jo

Webで読んだことのすべてが私を助けなかった。したがって、リクエストを行う前に、次のようにします。

driver.get(url);

次のような新しいスレッドを実行する必要があります。

RunScript runScript = new RunScript();
runScript.start();

この場合、次のクラスの別のスレッドでログインとパスワードを自由に入力できます

public class RunScript extends Thread {

@Override
public void run() {
    try {
        File file = new File("D:\\jacob-1.18-x86.dll");
        System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
        AutoItX autoIt = new AutoItX();
        Thread.sleep(2000);
        autoIt.winActivate("yourWindowName", "");
        autoIt.winWaitActive("yourWindowName");
        if (autoIt.winExists("yourWindowName")) {
            autoIt.send("username{TAB}", false);
            autoIt.send("password{Enter}", false);
            }
        }
    } catch (InterruptedException ex) {
        //
    }
}
}
1
Roman

with Chrome 70およびその他のバージョン:

http://username:[email protected]/yourpage
0
LKTS

自動ITスクリプトを使用してこの問題を処理できます

WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
0
Jack Wilson

Auto-it、sikuliなどを介したすべてのハッキングは、いくつかのブラウザータイプ/ OS /バージョン/解像度などを使用して、CIソリューションで実行するときに時間を浪費するだけです。

正しく行う方法は、実際の認証方法を特定し、たとえばRESTプロトコルを使用してログインを実行することです。

JSESIONID Cookieを取得してSeleniumドライバーに挿入するために使用しました。そのためのヒント:最初にドミノの存在しないURLに移動し、次にCookieを設定してから、必要なURLに移動します-ログインしています。

使用:クライアント認証をリセットしてJSESSION IDを取得する

そしてこの情報で:

browser().navigate(foo.getUrl()+"non-exiting-url");

//the information got from the rest client login:
Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly);

try {
    driver.manage().addCookie(cookie);
} catch (Exception e) {
    System.out.println(e.toString());
}

browser().navigate(foo.getUrl());
0
Yoav Levinger

Firefoxを使用してSelenium 2/Selenium WebDriverでJava Robotクラスを使用できます

WebDriver driver = new FirefoxDriver();
    driver.get("http://localhost:9990");

    WebElement myDynamicElement = driver.findElement(By.id("app"));

    Alert alert = driver.switchTo().alert();


    try {
        Robot robot = new Robot();
        alert.sendKeys("username");

        robot.keyPress(KeyEvent.VK_TAB);//go to password feild

        robot.keyPress(KeyEvent.VK_P);
        robot.keyPress(KeyEvent.VK_A);
        robot.keyPress(KeyEvent.VK_S);
        robot.keyPress(KeyEvent.VK_S);

        robot.keyPress(KeyEvent.VK_ENTER);


        } catch (AWTException e) {
        e.printStackTrace();
        }

    }

ロボットでのSeleniumの使用
http://docs.Oracle.com/javase/1.5.0/docs/api/Java/awt/Robot.html

0
Alex Punnen