我使用HTMLUnit将文本放入输入框,然后单击实际上是JS调用的链接。
当我使用inputBox.setValueAttribute("example input");
将文本放入输入时,问题出现了。在这种情况下,单击按钮后页面根本不会更改。
另一方面,一旦我删除inputBox.setValueAttribute("example input");
然后单击该按钮,页面内容确实会更改并包含空输入错误。
以下是我用于将文字放入相关输入然后点击按钮的代码。
public void addressToBlockPlot(){
WebClient client = new WebClient(BrowserVersion.FIREFOX_24);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.setJavaScriptTimeout(10000);
client.getOptions().setJavaScriptEnabled(true);
client.setAjaxController(new NicelyResynchronizingAjaxController());
client.getOptions().setTimeout(10000);
try {
HtmlPage page = client.getPage("http://mapi.gov.il/Pages/LotAddressLocator.aspx");
HtmlInput inputBox = (HtmlInput)page.getHtmlElementById("AddressInput");
final HtmlAnchor a = (HtmlAnchor) page.getElementById("helkaSubmit");
inputBox.setValueAttribute("example input");
a.click();
client.waitForBackgroundJavaScript(2000);
HtmlPage page2= (HtmlPage) client.getCurrentWindow().getEnclosedPage();
System.out.println(page2.asXml());
} catch (Exception e) {
}
}
解决此问题的任何想法?
修改
我尝试使用inputBox.setValueAttribute("");
,这导致收到的错误与我根本没有设置任何输入文本时相同。
答案 0 :(得分:0)
我有几乎类似的问题,JS需要一些时间来加载,我通过添加条件设置等待和重试直到页面加载成功解决了这个问题,
int input_length = page.getByXPath("//input").size();
int tries = 5;
while (tries > 0 && input_length < 12) {
tries--;
synchronized (page) {
page.wait(2000);
}
input_length = page.getByXPath("//input").size();
System.out.println("page loaded successfully");
}
这里input_length确定是否加载了所需的页面。您可以根据页面结构使用类似的条件。