单击htmlunit按钮没有响应帮我

问题描述

环境的配置如下。

java 1.8 htmlunit 2.43

        _webClient = new WebClient(browserVersion.FIREFOX);
        
        // ajax,javaScript controller
        _webClient.setAjaxController(new NicelyResynchronizingAjaxController());
                
        // set options
        _webClient.getoptions().setJavaScriptEnabled(true);
        _webClient.getoptions().setCssEnabled(false);
        
        _webClient.getoptions().setUseInsecureSSL(true);
        _webClient.getoptions().setSSLClientProtocols( _webClient.getoptions().getSSLClientProtocols() );
        //_webClient.getoptions().setSSLClientProtocols(new String[] {"TLSv1.2","TLSv1.1","TLSv1" });
        
        _webClient.getoptions().setRedirectEnabled(true);   
        _webClient.getoptions().setPopupBlockerEnabled(false);
        
        _webClient.getoptions().setThrowExceptionOnScriptError(false);
        _webClient.getoptions().setThrowExceptionOnFailingStatusCode(false);
        _webClient.getoptions().setPrintContentOnFailingStatusCode(false);
        
        _webClient.waitForBackgroundJavaScript(10000);
        // set timeouts
        _webClient.getoptions().setTimeout( timeout *1000 );
        _webClient.setJavaScriptTimeout( timeout *1000 );
        _webClient.waitForBackgroundJavaScript( timeout *500 );
        //_webClient.getJavaScriptEngine().setJavaScriptTimeout( timeout *1000 );
        _webClient.waitForBackgroundJavaScriptStartingBefore(timeout *1000);

        
        _webClient.getCookieManager().setCookiesEnabled(true);

以上是我的环境。

下面是我要单击的HTML元素。

<div class="btnConfirmWrap">
  <button data-v-ffa8b1e8=""
    class="hasBgColor bgColorRed roundType sizeMedium alignLeft">
    <span data-v-ffa8b1e8="" class="inner"> <!----> <span
        data-v-ffa8b1e8="" class=""> Login </span>
    <!----></span>
  </button>
</div>

这是单击上面提到的html元素的代码。 XPath的内容是通过访问Chrome获得的网页的fullXpath。 我自己检查了XPath路径。 XPath没错。

hElement = getByXPathFirstElement( _htmlPage,"/html/body/div[1]/main/div/div[1]/div/div[4]/button");
Page page = hElement.click();
_htmlPage = (HtmlPage) page;
System.out.println(_htmlPage.asText());

在单击登录按钮之前,我检查_htmlPage.asText()是否具有ID和PW值。 但是,如果单击该按钮,则不会执行登录按钮功能,并且ID和PW值会丢失。 ID和密码是正确的值。 无法登录,帮帮我 如果您直接访问该站点登录,则效果很好。但是htmlunit不起作用。我的代码有什么问题?

解决方法

没有重现方式,我只能提供一些提示:

像往常一样检查日志,也许有提示...。

这两个功能不是选项

_webClient.waitForBackgroundJavaScript( timeout *500 );
_webClient.waitForBackgroundJavaScriptStartingBefore(timeout *1000);

开始操作后(例如,单击后),您必须给他们打电话

Page page = hElement.click();
_htmlPage = (HtmlPage) page;

您的代码会通过点击获得您的同步结果页面。但是,也许您单击会强制执行某些js操作,或者该操作是异步操作,并且可能会强制执行页面替换。您可以尝试执行以下操作:

  • 强制点击
  • 等待后台js
  • 通过向页面询问当前窗口,然后向窗口询问所附页面来获取当前窗口内容

也许有帮助。

如果不尝试构建可复制的样本并在github上发布问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...