HTMLUnit等待JS问题

时间:2014-09-03 12:26:37

标签: java javascript htmlunit

我使用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("");,这导致收到的错误与我根本没有设置任何输入文本时相同。

1 个答案:

答案 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确定是否加载了所需的页面。您可以根据页面结构使用类似的条件。