Java HtmlUnit-如何获得正确的表单?

Java HtmlUnit-如何获得正确的表单?,java,Java,我正在尝试通过HtmlUnit登录account.mojang.com/login。我似乎找不到要登录的表单,所以我循环浏览了页面上的所有表单,如果它们有一个登录按钮,它将执行所有操作。我怎样才能得到我要找的表格? (这是代码,但它不起作用。) @SuppressWarnings(“资源”) 公共静态无效nk(){ 字符串用户名=Sniper.username; 字符串email=Sniper.email; 字符串密码=Sniper.pass; System.out.println(“狙击!”)

我正在尝试通过HtmlUnit登录account.mojang.com/login。我似乎找不到要登录的表单,所以我循环浏览了页面上的所有表单,如果它们有一个登录按钮,它将执行所有操作。我怎样才能得到我要找的表格? (这是代码,但它不起作用。)

@SuppressWarnings(“资源”)
公共静态无效nk(){
字符串用户名=Sniper.username;
字符串email=Sniper.email;
字符串密码=Sniper.pass;
System.out.println(“狙击!”);
最终WebClient web=新WebClient();
试一试{
最终HtmlPage page1=web.getPage(“https://account.mojang.com/login");
对于(HtmlForm loginForm:page1.getForms()){
if(loginForm.getInputByName(“登录”)!=null){
最终列表loginButton=loginForm.getInputsByValue(“登录”);
最终HtmlTextInput emailEnter=loginForm.getInputByName(“电子邮件”);
emailEnter.setValueAttribute(电子邮件);
最终HtmlTextInput passbutton=loginForm.getInputByName(“密码”);
passbutton.setValueAttribute(密码);
final HtmlPage page2=loginButton.get(0).click();
系统输出打印项次(第2页);
changeUsername1(第2页。getAnchorByText(“更改”)。单击(),用户名,密码);
}}
}捕获(例外e){
e、 printStackTrace();
剪=真;
}
}
@SuppressWarnings({“资源”,“未使用的”})
公共静态void changeUsername1(第1页,字符串用户名,字符串密码){
最终WebClient web=新WebClient();
试一试{
最终的HtmlPage=web.getPage(page1.getUrl());
for(HtmlForm表单:page.getForms()){
if(form.getInputsByValue(“更改名称”)!=null){
最终列表按钮=form.getInputsByValue(“更改名称”);
最终的HtmlTextInput textField=form.getInputByName(“新配置文件名”);
textField.setValueAttribute(用户名);
最终HtmlTextInput textField1=form.getInputByName(“密码”);
textField1.setValueAttribute(密码);
final HtmlPage page2=按钮。获取(0)。单击();
form.getButtonByName(“是”)。单击();
}
}
}捕获(IOE异常){
e、 printStackTrace();
剪=真;
}
剪=真;
}

您正在使用哪个浏览器?使用
Firebug
或类似工具搜索表单。以下是该页面上的表单-使用Safari inspect工具搜索


我现在正在使用Chrome并对其进行测试。:)谢谢我使用了你说的名称,但我得到了这个错误:com.gargoylesoftware.htmlunit.ElementNotFoundException:elementName=[form]attributeName=[name]attributeValue=[authenticityToken]在com.gargoylesoftware.htmlunit.html.HtmlPage.getFormByName(HtmlPage.java:638)在me.InfIV.Sniper.Stuff.nk(Stuff.java:38)atme.InfIV.Sniper.Sniper.setStuff(Sniper.java:54)atme.InfIV.Sniper.Sniper.main(Sniper.java:42)第38行是最终的HtmlForm loginForm=page1.getFormByName(“authenticityToken”);我不知道为什么会发生这种情况请参见
getElementById('loginForm')
并将其转换为
HTMLForm
我还有一个问题,有没有办法通过id获取按钮?(在表格内)?HtmlForm中没有getElementById方法。不确定。但是您可以使用
getAll
获取所有元素并进行搜索。
@SuppressWarnings("resource")
public static void nk(){
    String username = Sniper.username;
    String email = Sniper.email;
    String password = Sniper.pass;
    System.out.println("Sniping!");
    final WebClient web = new WebClient();
    try{
        final HtmlPage page1 = web.getPage("https://account.mojang.com/login");
        for(HtmlForm loginForm: page1.getForms()){
            if(loginForm.getInputByName("Log in")!=null){
                final List<HtmlInput> loginButton = loginForm.getInputsByValue("Log in");
                final HtmlTextInput emailEnter = loginForm.getInputByName("E-mail");
                emailEnter.setValueAttribute(email);
                final HtmlTextInput passbutton = loginForm.getInputByName("Password");
                passbutton.setValueAttribute(password);
                final HtmlPage page2 = loginButton.get(0).click();
                System.out.println(page2);
                changeUsername1(page2.getAnchorByText("Change").click(), username, password);
            }}
        }catch(Exception e){
            e.printStackTrace();
            sniped = true;
        }
    }
    @SuppressWarnings({ "resource", "unused" })
    public static void changeUsername1(Page page1,String username, String password){
        final WebClient web = new WebClient();
        try{
            final HtmlPage page = web.getPage(page1.getUrl());
            for(HtmlForm form :page.getForms()){
                if(form.getInputsByValue("Change name")!=null){
                    final List<HtmlInput> button = form.getInputsByValue("Change name");
                    final HtmlTextInput textField = form.getInputByName("New profile name");
                    textField.setValueAttribute(username);
                    final HtmlTextInput textField1 = form.getInputByName("Password");
                    textField1.setValueAttribute(password);
                    final HtmlPage page2 = button.get(0).click();
                    form.getButtonByName("Yes").click();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            sniped = true;
        }
        sniped = true;
    }