HtmlUnit:当getInputByName / Value不可能时,如何获取密码字段?

时间:2014-11-10 22:27:07

标签: html-form htmlunit

我正在编写一个小程序来下载我的博客文章,其中一些文章受用户名和密码保护。这就是HtmlUnit发挥作用的地方。对于所有的公开文章,我没有问题。但对于受保护的文章,我需要使用HtmlUnit登录。现在主机页面没有在HtmlForm中提供名称或值属性。以下是主页的HTML代码片段。

<form id="notLogin" tabindex="6" method="post" action="#" onsubmit="return false" style="outline: none;">
                        <div class="login-form-top"><input autocomplete="off" tabindex="7" id="loginName" type="text" name="loginName" value="" class="login-mod-input" placeholder="微博/博客/邮箱/手机号"><input id="loginPass" tabindex="8" type="password" name="" value="" class="login-mod-input" placeholder="请输入密码"></div>
                    </form>

正如您所看到的,对于loginPass,我甚至没有找到密码字段的名称或值。我写了以下相关部分。

        final HtmlForm loginForm = (HtmlForm) page.getFirstByXPath("//form[@id='notLogin']");
    System.out.println(loginForm);

    final HtmlTextInput usrnHtmlTextInput = loginForm.getInputByName("loginName");
    usrnHtmlTextInput.setValueAttribute(username);
    System.out.println(usrnHtmlTextInput);

    final HtmlPasswordInput pwdInput = loginForm.getInputByName("password");
    pwdInput.setValueAttribute(password);
    System.out.println(pwdInput);

    final HtmlPage page2 =  (HtmlPage) loginForm.getInputByValue("登录").click();
    System.out.println(page2);

在这种情况下,您能否指出我如何找到密码输入字段?

提前致谢!僖。

2 个答案:

答案 0 :(得分:0)

两个输入都有ID。 ID唯一标识DOM中的元素。这是获取元素的最简单,最快捷的方法:

HtmlInput loginInput = page.getHtmlElementById("loginName");
HtmlInput passwordInput = page.getHtmlElementById("loginPass");

相关api doc

答案 1 :(得分:0)

同意JB Nizet,两个节点都有ID,你也可以使用任何选择器,CSS或XPATH也很有用,

    HtmlInput login_name = (HtmlInput) page.getByXPath("//*[@id='loginName']").get(0);
    HtmlInput login_pass = (HtmlInput) page.getByXPath("//*[@id='loginPass']").get(0);