【问题标题】:Using HtmlUnit how to click (form) a button that isnt a button使用 HtmlUnit 如何单击(形成)不是按钮的按钮
【发布时间】:2019-09-06 12:33:33
【问题描述】:

我经常遇到按钮,尤其是登录表单上的按钮,它们似乎是一系列嵌套的divs,span 作为最后一个元素。

这些很少是表单的一部分,我假设由 Jvascript 控制。

是否可以通过单击这些按钮来实现按钮操作的效果,例如登录网站并返回新页面?

我曾尝试在页面加载后等待 javascript 加载:

HtmlPage page = webClient.getPage(someUrl);
webClient.waitForBackgroundJavaScript(6000);

然后点击divs 和span 并没有任何反应。

我正在使用 HtmlUnit 2.36,我知道存在一些 Javascript 评估问题。

【问题讨论】:

    标签: htmlunit


    【解决方案1】:

    通常你可以做类似的事情

    webClient.getOptions().setThrowExceptionOnScriptError(false);
    
    
    HtmlPage page = webClient.getPage(someUrl);
    webClient.waitForBackgroundJavaScript(6000);
    
    // locate your clickable element
    ....
    
    buttonLike.click();
    // wait until the js has done the job
    webClient.waitForBackgroundJavaScript(20000);
    
    // now get the current page content based on the current window; using
    // HtmlPage myPage = (HtmlPage) buttonLike.click();
    // does not work in all cases because the page content might be 
    // async replaced by javascript
    HtmlPage myPage = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
    

    【讨论】:

    • 奇怪的是,getPage 返回的速度很快,所以我没有考虑延长 Javascript 等待时间。我一定会试一试的。感谢您对我的所有 HtmlUnit 问题的回复。
    • waitForBack.. 不是您每次想等待时都必须调用它的选项。
    • 考虑到在click 之后经常会调用waitForBavkgroundJavaScript,也许在click 旁边有一个新方法会很好,比如clickThenWaitForBackgroundJavaScript(timeOutInMillis) 只是一个想法
    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2016-11-28
    • 2013-10-02
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多