我正在编写一个小程序来下载我的博客文章,其中一些文章受用户名和密码保护。这就是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);
在这种情况下,您能否指出我如何找到密码输入字段?
提前致谢!僖。
答案 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);