簡體   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