Java HtmlUnit form.getInputByValue ("Login Now!").click();

标签 java htmlunit

我正在尝试制作一个应用程序,该应用程序将使用用户提供的登录名连接到站点。我在使用 Java 与网站交互方面没有任何经验,所以我用谷歌搜索了一些并找到了适合我需要的 hmtlunit。

但是我在尝试点击登录表单的提交按钮时遇到了错误:

public static boolean attempt_login(String username, String password) throws ElementNotFoundException, IOException {
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.setJavaScriptEnabled(false);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setRefreshHandler(new RefreshHandler() {
            public void handleRefresh(Page page, URL url, int arg) throws IOException {
                System.out.println("handleRefresh");
            }
        });

        HtmlPage page = (HtmlPage) webClient.getPage(Config.LOGIN_PAGE);
        List<HtmlForm> forms = page.getForms();
        HtmlForm form = null;
        for(HtmlForm f : forms){
            if(f.getId().equals("login_form")){
                form = f;
            }
        }
        if(form == null){
            throw new NullPointerException("Could not find form!");
        }
        form.getInputByName("username").setValueAttribute(username);
        form.getInputByName("password").setValueAttribute(password);

        page = (HtmlPage) form.getInputByValue("Login Now!").click();

        System.out.println(page.asText());
        return false;}

不知怎么的,它找不到要登录的提交按钮

com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[value] attributeValue=[Login Now!]
at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByValue(HtmlForm.java:737)
at domain.Helper.attempt_login(Helper.java:41)
at TesterStartUp.main(TesterStartUp.java:15)

html源码:

<button type="submit" value="Login Now!" onmouseover="this.style.backgroundPosition='bottom';" onmouseout="this.style.backgroundPosition='top';" onclick="return SetFocus();">Login Now!</button>

当我用谷歌搜索解决方案时,我发现有关禁用 javascript 的内容会有所帮助。所以我告诉 webclient 禁用它(webClient.setJavaScriptEnabled(false);)但仍然有异常。

起初我在尝试选择表单(“login_form”)时遇到了同样的问题,但有一种方法可以让我获得所有表单的列表,然后只查看是否有一个与列表匹配。我找不到提交按钮的解决方法,所以我希望其他人知道这个问题的解决方案。

提前致谢, 巨魔爵士

最佳答案

HtmlUnit getInputByValue() method<form> 上运行只会返回 HtmlInput 的类型,以及唯一的输入按钮类型 -- HtmlButtonInput -- 代表 <input type="button">而不是 <button> .您将需要更改 HTML 或使用不同的 HtmlUnit 方法调用。

关于Java HtmlUnit form.getInputByValue ("Login Now!").click();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810000/

相关文章:

java - JDBC批量插入耗时较长

java - 字符串数组的返回语句给出奇怪的结果

java - SOAPUI 转移属性(property)

Java:无法关闭 HtmlUnit 日志消息(2016)

java - 如何在 jsoup 中处理 JavaScript 重定向

java - HtmlUnit:每个线程一个 WebClient - 它是线程安全的吗?

java - 无法使用 PowerMockito stub 静态方法调用

java - 使用Jedis的Redis中单个键占用的内存?

java - 如何通过Java代码捕获用户在浏览器上的操作?

Java:HtmlUnit 效率 relacing PHP CURL?