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