HTMLUNIT,JAVA

问题描述 投票:-2回答:1

我无法从页面获得javascript响应。关注我的代码... jquery不兼容?

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setJavaScriptEnabled(true);
     webClient.getOptions().setUseInsecureSSL(true);
     webClient.getOptions().setRedirectEnabled(true);
     webClient.getOptions().setTimeout(3000);
     webClient.waitForBackgroundJavaScript(3000);
     webClient.getOptions().setCssEnabled(true);

     HtmlPage page = webClient.getPage("");
         HtmlForm form = (HtmlForm) page.getElementByName("tabview-consultas-publicas:formExtratos");
        HtmlRadioButtonInput radioButton = (HtmlRadioButtonInput) form.getRadioButtonsByName("tabview-consultas-publicas:formExtratos:tipoInformacao").get(0);      
        radioButton.setAttribute("checked","");
        radioButton.setChecked(true);
        HtmlButton button = form.getButtonByName("tabview-consultas-publicas:formExtratos:j_idt156");
        button.click();
        System.out.println(page.asText());
        System.exit(0);
java htmlunit
1个回答
0
投票

根据您提供的信息,很难给您一些建议。至少没有网址让我们有机会重现你的问题,你没有告诉我们任何日志输出。

所以这里有我的建议:

  • 使用最新的HtmlUnit版本甚至更好的最新快照构建
  • 使用最新的浏览器模拟(目前FF62)
  • 如果您不需要(并了解)他们正在做什么,请不要设置任何选项
  • waitForBackgroundJavaScript()不是一个选项(在这里多次提到)你必须在一个动作后调用它

关于按钮点击没有;截至今天,或多或少有三种按钮

  1. 好旧的提交按钮。这种按钮正在向服务器提交一些表单,您将返回一个新页面。要使用它,你必须使用click方法的结果,如nextPage = button.click();
  2. html按钮标签,它与你当前的页面做一些javascript魔术。在这种情况下,您可以忽略click()方法的结果并继续您已有的页面。执行javascript可能是异步的,为了解决这个问题,你必须调用webClient.waitForBackgroundJavaScript(3000);在click()调用之后
  3. 这些天所有这些js框架完成了基于ajax的超级聪明的动作处理。这通常是2的增强版本 - 差异可能是页面被替换(重新加载)从javascript触发。如果发生此重新加载,则页面对象(以及单击方法的结果)将指向旧页面。要处理这种情况,你必须做这样的事情
btn.click();
// wait for the async js
webClient.waitForBackgroundJavaScript(20000);
// get the current page from the window in case it was replaced by some js magic
newPage = (HtmlPage) page.getEnclosingWindow().getTopWindow().getEnclosedPage();

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.