Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java htmlunit按钮已单击,但服务器的响应与单击的按钮不同_Java_Htmlunit - Fatal编程技术网

Java htmlunit按钮已单击,但服务器的响应与单击的按钮不同

Java htmlunit按钮已单击,但服务器的响应与单击的按钮不同,java,htmlunit,Java,Htmlunit,(哇,我不知道在这里获得帮助有多难。如果有人看到这个问题可以更好地提出,我愿意接受建议) 简单地说,我使用HtmlUnit加载页面、更改字段并单击()提交按钮。但是,服务器总是以页面作为响应,如果单击了不同窗体上的不同按钮,则返回该页面 显而易见的答案是,我一定是选择了错误的表单或错误的按钮。然而,在过去的几周里,我使用了许多不同的语义来选择按钮,并进行了许多测试,以验证它确实是正确表单上的正确按钮 我已经在这个网站上用了好几个月了,我想你们每个人都在学习各种各样的东西。 但这件事已经困扰了我好

(哇,我不知道在这里获得帮助有多难。如果有人看到这个问题可以更好地提出,我愿意接受建议)

简单地说,我使用HtmlUnit加载页面、更改字段并单击()提交按钮。但是,服务器总是以页面作为响应,如果单击了不同窗体上的不同按钮,则返回该页面

显而易见的答案是,我一定是选择了错误的表单或错误的按钮。然而,在过去的几周里,我使用了许多不同的语义来选择按钮,并进行了许多测试,以验证它确实是正确表单上的正确按钮

我已经在这个网站上用了好几个月了,我想你们每个人都在学习各种各样的东西。 但这件事已经困扰了我好几个星期了

以下是我尝试使用的精简网页:

<HTML>
...

<FORM ACTION="http://www.awebsite.com/search.asp" METHOD="POST">
...
<INPUT TYPE="SUBMIT" VALUE="Go!">
...
</form>

...

<FORM METHOD="POST" ACTION="inventory.asp?a=sd&blindID=252">
...
<INPUT TYPE="Submit" VALUE="Go!">
...
</form>

...

<FORM ACTION="inventory.asp?pg=1&blindID=252&a=c&viewPrices=" METHOD="post">
...
<INPUT TYPE="Submit" VALUE="Submit Changes" onClick="this.disabled=true;this.form.submit()">
...
</form>

...
</HTML>

...
...
...
...
...
...
...
...
...
...
以及我处理它的java程序片段:

// call my own external routine for getting web pages
HtmlPage page = webFetch.fetchWithCookies("http://www.awebsite.com/inventory.asp?blindID="+blindId, validator, filename); // get page with forms on it

// modify an input field
inpPrice = page.getElementByName("newPrice"+item.lotId);
inpPrice.setValueAttribute(item.price.toString());

// submit modified page to server
List<HtmlForm> forms = page.getForms();
HtmlForm form = forms.get(2);
HtmlSubmitInput button = form.getInputByValue("Submit Changes");
HtmlPage page2 = button.click(); // get the server response page

// save the returned page locally so we can look at it
File saveFile = new File("page2.htm");
if (saveFile.exists()) {
    saveFile.delete();
}
page2.save(saveFile);
//调用我自己的外部例程获取网页
HtmlPage=webFetch.fetchWithCookies(“http://www.awebsite.com/inventory.asp?blindID=“+blindId,验证程序,文件名);//获取包含表单的页面
//修改输入字段
inpPrice=page.getElementByName(“newPrice”+item.lotId);
inprice.setValueAttribute(item.price.toString());
//将修改后的页面提交到服务器
列表表单=page.getForms();
htmlformform=forms.get(2);
HtmlSubmitInput button=form.getInputByValue(“提交更改”);
HtmlPage page2=按钮。单击();//获取服务器响应页面
//将返回的页面保存在本地,以便我们可以查看它
File saveFile=新文件(“page2.htm”);
if(saveFile.exists()){
saveFile.delete();
}
第2页保存(保存文件);
我想要第三种形式,但我所做的一切都得到了第二种形式的回应。我尝试过的事情:

  • 我使用setJavaScriptEnabled(false);因为当我打开它时,我会犯很多我无法理解的错误
  • BrowserVersion.FIREFOX\u 3\u 6“browser”常量没有任何区别
  • 我尝试使用.type('\n');在表单中的一个字段输入上。没有区别
  • 尝试过的表单。获取(3)只是为了确保我获取了列表中的最后一个表单,以防有隐藏的表单我没有看到。这给我带来了一个IndexOutOfBoundsException错误,表明只提取了3个表单
  • 在我的现代Firefox浏览器中关闭javascript,并尝试执行与我尝试使用HtmlUnit完成的步骤完全相同的步骤。服务器返回了正确的和预期的页面,就好像按下了正确的按钮一样。这似乎意味着javascript是不需要的,因此不是我麻烦的根源

当您在调试期间检查时,您可以多次看到这是正确的形式。表单和按钮看起来总是正确的。-其他人提供的答案被删除了吗?你有没有检查HTTP请求,到底发送了什么,发送到哪个资源?啊,没有。听起来不错,但我不知道如何使用或使用什么工具。您可以使用并制作一种本地代理,在其中您的页面将引用本地代理地址:端口,代理将引用正确的服务器:端口