如何解决HtmlUnit,尝试获取表单但出现错误
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class Main {
public static void main(String[] args) {
WebClient webClient = new WebClient();
webClient.getoptions().setThrowExceptionOnScriptError(false);
try {
HtmlPage page = (HtmlPage) webClient
.getPage("https://www.reddit.com/login");
HtmlForm form = page.getFormByName("AnimatedForm");
form.getInputByName("username").setValueAttribute("myUsername");
HtmlInput passWordInput = form.getInputByName("password");
passWordInput.removeAttribute("disabled");
passWordInput.setValueAttribute("myPassword");
page = form.getInputByValue("Log In").click(); // works fine
System.out.println(page.asText());
} catch (Exception e) {
e.printstacktrace();
} finally {
webClient.close();
}
}
}
每次运行此命令时,都会出现一条错误消息,提示“ com.gargoylesoftware.htmlunit.ElementNotFoundException:elementName = [form] attributeName = [name] attributeValue = [AnimatedForm]”。似乎无法识别AnimatedForm。我只是想知道为什么。
解决方法
您使用的page.getFormByName("AnimatedForm")
方法将搜索具有属性<form>
的{{1}}。
页面上没有名称为“ AnimatedForm”的表单,我看到了一个类为“ AnimatedForm”的表单。要按类检索元素,请使用类似name="AnimatedForm"
您真的要努力使登录名与Reddit一起使用。这不是一个简单的过程。如果您手动尝试登录,则登录名将提交凭据,并且看起来您是在浏览器中异步获得响应的,而没有立即重定向。实际上,将用户重定向到浏览器中的主登录页面大约需要5秒钟。
我强烈建议您着眼于利用现有的API,而不是尝试实现登录过程(我已经尝试过并与HTTP协议一起使用,每天都在构建Web服务...这并不简单。 )。
有用的资源:您可以在Java项目https://github.com/ViteFalcon/reddit4j中使用的Reddit库(未经测试,但值得一试)
Reddit Api:https://www.reddit.com/dev/api/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。