19

有谁知道在自动化过程中使用 Selenium 或任何其他工具处理浏览器身份验证?

4

7 回答 7

21

2015年编辑:

这个答案已经过时了。WebDriver 现在支持身份验证!请参阅如何使用 Java 使用 Selenium WebDriver 处理身份验证弹出窗口


原答案:

Selenium 不能很好地处理这个问题。


您可以尝试使用http://username:password@example.com/yourpage

而不仅仅是http://example.com/yourpage

但是,据我所知,Firefox 仍然会弹出一个浏览器对话框请求确认。


如果您使用 Java(或任何类似的工具,如AutoIt),您可以尝试使用Robot 。


driver.manage().addCookie()如果您使用的是 WebDriver,则可以使用。


或者已经通过一次认证的自定义FirefoxProfile 。

于 2012-05-01T11:29:40.363 回答
7

我花了几天的时间 - 从字面上看。试图在我的公司网络中通过浏览器级别的身份验证来访问应用程序。解决方案是在 URL 中使用 'unsername:password@' 组件,但在登录 URL 的末尾添加正斜杠

所以总的登录 URL 看起来像这样(注意yourpage之后的“/” ):

http://username:password@example.com/yourpage/

与 Watir、Capybara 和 Selenium Webdriver 一起使用。

于 2016-09-29T03:25:49.800 回答
1

通过 auto-it、sikuli 等进行的所有黑客攻击只是在浪费您的时间,因为您将在 CI 解决方案中运行它,使用多种浏览器类型/操作系统/版本/分辨率等。

正确执行此操作的方法是识别身份验证实际方法并使用 Rest 协议执行登录。

我用它来获取 JSESIONID cookie 并将其插入到 selenium 驱动程序中。提示:首先转到 domian 的非退出 url,然后设置 cookie,然后转到所需的 url - 您已登录。

使用:rest客户端认证获取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());
于 2015-10-18T14:46:22.780 回答
1

我在网上阅读的所有内容都对我没有帮助。所以在提出请求之前,像这样:

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) {
        //
    }
}
}
于 2016-07-05T12:54:48.347 回答
0

你可以使用自动 IT 脚本来处理这个问题

WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
于 2018-05-31T09:58:42.723 回答
0

使用 Chrome 70 和其他版本:

http://username:password@example.com/yourpage
于 2019-01-31T11:08:12.107 回答
-1

您可以使用 Firefox 将 Java Robot 类与 Selenium 2 /Selenium WebDriver 一起使用

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

于 2012-11-23T12:20:18.480 回答