繁体   English   中英

HtmlUnit 执行 Javascript 后如何获取页面

[英]HtmlUnit How to get a page after executing Javascript

我正在尝试使用 Html Unit 在网页上运行 javascript 以更改页面。

我正在导入:

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.ScriptResult;

代码类似于:

String javaScriptCode = "changePage(1)";
try{
    webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setCssEnabled(false);
    webClient.getOptions().setJavaScriptEnabled(true);
    page = webClient.getPage(url);
    newPage = page.executeJavaScript(javaScriptCode).getNewPage();
    webClient.close();
} catch (Exception e) {
    e.printStackTrace();
}

但是我得到了错误:

[Java] The method getNewPage() is undefined for the type ScriptResult [67108964]

这很清楚,但是它没有告诉我应该使用哪种方法? 我在互联网上找到的大部分内容都是基于 getNewPage 方法或 getPage 但库中可能已经发生了变化......请参阅: 使用 HTMLUnit 调用 JavaScript 函数

我在用着 :

<dependency>
  <groupId>net.sourceforge.htmlunit</groupId>
  <artifactId>htmlunit</artifactId>
  <version>2.33</version>
</dependency>

是的,你是对的,getNewPage() 方法在 2.33 版本中被删除,作为关于事件处理的大规模重构的一部分。

作为替代,您可以使用窗口的封闭页面。

例如,如果您确定生成的页面与当前页面位于同一窗口中(已替换您的页面而不打开新窗口),您可以使用

page.getEnclosingWindow().getEnclosedPage()

如果您的代码可能会打开一个新窗口,那么向 webClient 询问当前窗口会更省事(新打开的窗口会自动标记为当前窗口)

page.getWebClient().getCurrentWindow().getEnclosedPage()

或者在您的代码示例中,您可以直接使用客户端

webClient.getCurrentWindow().getEnclosedPage()

希望有帮助。

至于我,我尝试了 selenium 浏览器:

<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>3.141.59</version>
</dependency>

我发现它非常少! 我刚刚构建了一个驱动程序,一个js执行器,只要JS运行,驱动程序就会在好页面上是最新的。

driver = new ChromeDriver();
js = (JavascriptExecutor)driver;
driver.get(url);
js.executeScript(script);

四行就成功了。 我想我会坚持使用硒,除非有充分的理由不这样做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM