簡體   English   中英

htmlunit java - 如何解析來自 javascript 的內容結果? 和 htmlunit 錯誤

[英]htmlunit java - How to parse a content results from javascript? and a htmlunit error

這是我要抓取的頁面之一: https : //www.tokopedia.com/berkahcell2/promo-termurah-vr-virtual-reality-box-v-2-0-remote-bluetooth-gamepad/review? src=頂墊

我想抓取“ulasan terbaru”下的評論文本,我認為這是 javascript 的結果(雖然我可能錯了,我不完全確定如何通過檢查元素檢查它),除此之外我也是不確定 HTMLUnit 中的幾件事

我已經讀過它來抓取我需要使用 HTMLUnit 而不是 Jsoup 的 javascript 內容。 我已閱讀http://htmlunit.10904.n7.nabble.com/Selecting-a-div-by-class-name-td25787.html嘗試按類抓取div 的評論,但我的輸出為零。

    public static void comment(String url) throws IOException{

        WebClient client = new WebClient();
        client.setCssEnabled(true);
        client.setJavaScriptEnabled(true);
        
        try {
            HtmlPage page = client.getPage(url);
            List<?> date = page.getByXPath("//div/@class='list-box-comment'");
            System.out.println(date.size());
            for(int i =0 ; i<date.size();i++){
                System.out.println(date.get(i).asText());
            }
        }
        catch(Exception e){
                e.printStackTrace();
            }

    }

這是我的代碼中將處理注釋抓取的部分,我做對了嗎? 但我有兩個問題:

  1. 在“asText()”它說“無法解析方法asText()”
  2. 即使我在沒有“asText()”的情況下運行,我也將其視為錯誤:
com.gargoylesoftware.htmlunit.ObjectInstantiationException: unable to create HTML parser
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.<init>(HTMLParser.java:418)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.<init>(HTMLParser.java:342)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:203)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:106)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:433)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)
    at ReviewScraping.comment(ReviewScraping.java:86)
    at ReviewScraping.main(ReviewScraping.java:108)
Caused by: org.xml.sax.SAXNotRecognizedException: Feature 'http://cyberneko.org/html/features/scanner/allow-selfclosing-iframe' is not recognized.
    at org.apache.xerces.parsers.AbstractSAXParser.setFeature(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.<init>(HTMLParser.java:411)
    ... 11 more

我希望我可以顯示所有的評論

/edit我在做這個時使用 Intellij 作為我的 IDE,並且 HTMLUnit 的依賴關系通過使用 Maven 在我的 Intellij 項目結構中

關於你的代碼:

public static void main(String[] args) throws IOException {
    final String url = "https://www.tokopedia.com/berkahcell2/promo-termurah-vr-virtual-reality-box-v-2-0-remote-bluetooth-gamepad/review?src=topads";

    try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {
        webClient.getOptions().setThrowExceptionOnScriptError(false);

        HtmlPage page = webClient.getPage(url);
        webClient.waitForBackgroundJavaScript(40_000);

        System.out.println(page.asXml());

        List<DomNode> date = page.getByXPath("//div[@class='list-box-comment']");
        System.out.println(date.size());

        for(int i = 0 ; i < date.size();i++){
            System.out.println(date.get(i).asText());
        }
    }
}

現在頁面本身的問題:

已經做了一些測試,看起來頁面也會在真實瀏覽器中產生錯誤(檢查瀏覽器控制台)。 但是使用 HtmlUnit 您會遇到更多問題(可能是因為缺少對某些 javascript 功能的支持)。 通常這種頁面會使用很多很多行的 js 代碼 - 找出問題所在對我來說真的很耗時。 如果您想修復此問題,請嘗試找出問題的真正原因(有關一些提示,請參閱http://htmlunit.sourceforge.net/submittingJSBugs.html )並提交錯誤報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM