Java HtmlUnit form.getInputByValue(“立即登录!”)。click();

时间:2011-04-27 20:15:52

标签: 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;}

不知何故,它无法找到要登录的submitButton

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”),但有一种方法可以获取所有表单的列表,然后查看是否与列表匹配。我无法找到提交按钮的方法,所以我希望其他人知道这个问题的解决方案。

提前致谢, 特罗尔爵士

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我有同样的问题,我自己解决了:

当您尝试使用html单元登录时,首先检查登录框是否正在使用jquery显示。如果在单击按钮后出现登录框/ div,则需要刷新页面(Web客户端)以访问新的输入元素

 HtmlPage page = webClient.getPage("https://www.yourwebsite.com/#");
 HtmlAnchor link=page.getElementByName("link");
 link.click();
 page.refresh();

如果您的网站有一个按钮而不是锚链接,请将其更改为html按钮,刷新后可以找到该元素。

希望它能帮助解决您的问题