微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HtmlUnit,尝试获取表单但出现错误

如何解决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 举报,一经查实,本站将立刻删除。