0

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

简单地说,我使用 HtmlUnit 来加载页面、更改字段并 .click() '提交'按钮。但是,如果单击了不同表单上的不同按钮,服务器始终会返回将返回的页面。

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

我已经使用这个网站几个月来学习各种各样的东西,大家想。但是这个让我难倒了好几个星期。

这是我正在尝试使用的精简网页:

<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);

我想要第三种形式,但我所做的一切都会让我得到第二种形式的回应。我尝试过的事情:

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

0 回答 0