第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

頁面內(nèi)容加載了JavaScript,Jsoup看不到它

頁面內(nèi)容加載了JavaScript,Jsoup看不到它

梵蒂岡之花 2019-07-27 14:18:08
頁面內(nèi)容加載了JavaScript,Jsoup看不到它頁面上的一個(gè)塊由JavaScript填充內(nèi)容,在使用Jsoup加載頁面后,沒有任何信息。有沒有辦法在解析頁面時(shí)獲取JavaScript生成的內(nèi)容Jsoup?無法粘貼頁面代碼,因?yàn)樗L了:http://pastebin.com/qw4Rfqgw這是我需要的內(nèi)容元素: <div id='tags_list'></div>我需要用Java獲取這些信息。最好使用Jsoup。元素是JavaScript的幫助領(lǐng)域:<div id="tags_list">     <a href="/tagsc0t20099.html" style="font-size:14;">разведчик</a>     <a href="/tagsc0t1879.html" style="font-size:14;">Sr</a>     <a href="/tagsc0t3140.html" style="font-size:14;">стратегический</a></div>Java代碼:import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.io.IOException;public class Test{     public static void main( String[] args )     {         try         {             Document Doc = Jsoup.connect( "http://www.bestreferat.ru/referat-32558.html" ).get();             Elements Tags = Doc.select( "#tags_list a" );             for ( Element Tag : Tags )             {                 System.out.println( Tag.text() );             }         }         catch ( IOException e )         {             e.printStackTrace();         }     }}
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊

JSoup是一個(gè)HTML解析器,而不是某種嵌入式瀏覽器引擎。這意味著它完全沒有意識(shí)到在初始頁面加載后由Javascript添加到DOM的任何內(nèi)容。

要訪問這種類型的內(nèi)容,您需要一個(gè)嵌入式瀏覽器組件,關(guān)于這種組件有很多關(guān)于SO的討論,例如,有沒有辦法在Java中嵌入瀏覽器?


查看完整回答
反對(duì) 回復(fù) 2019-07-27
?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊

用com.codeborne.phantomjsdriver解決了我的情況注意:它是groovy代碼。

的pom.xml

        <dependency>
          <groupId>com.codeborne</groupId>
          <artifactId>phantomjsdriver</artifactId>
          <version> <here goes last version> </version>
        </dependency>

PhantomJsUtils.groovy

import org.jsoup.Jsoupimport org.jsoup.nodes.Documentimport org.openqa.selenium.WebDriverimport org.openqa.selenium.phantomjs.PhantomJSDriverclass PhantomJsUtils {
    private static String filePath = 'data/temp/';

    public static Document renderPage(String filePath) {
        System.setProperty("phantomjs.binary.path", 'libs/phantomjs') // path to bin file. NOTE: platform dependent
        WebDriver ghostDriver = new PhantomJSDriver();
        try {
            ghostDriver.get(filePath);
            return Jsoup.parse(ghostDriver.getPageSource());
        } finally {
            ghostDriver.quit();
        }
    }

    public static Document renderPage(Document doc) {
        String tmpFileName = "$filePath${Calendar.getInstance().timeInMillis}.html";
        FileUtils.writeToFile(tmpFileName, doc.toString());
        return renderPage(tmpFileName);
    }}

ClassInProject.groovy

Document doc = PhantomJsUtils.renderPage(Jsoup.parse(yourSource))


查看完整回答
反對(duì) 回復(fù) 2019-07-27
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

你需要了解發(fā)生了什么:

  • 當(dāng)您從網(wǎng)站查詢頁面時(shí),無論是使用Jsoup還是瀏覽器,返回給您的是一些HTML。Jsoup能夠解析它。

  • 但是,大多數(shù)網(wǎng)站都包含該HTML中的Javascript,或者從該HTML鏈接,該HTML將使用內(nèi)容填充頁面。您的瀏覽器能夠執(zhí)行Javascript,從而填充頁面。Jsoup不是。

理解這一點(diǎn)的方法如下:解析HTML代碼很容易。執(zhí)行Javascript代碼和更新相應(yīng)的HTML代碼要復(fù)雜得多,并且是瀏覽器的工作。

以下是針對(duì)此類問題的一些解決方案:

  1. 如果您可以找到Javascript代碼正在進(jìn)行的Ajax調(diào)用,即加載內(nèi)容,您可以使用Jsoup使用這些調(diào)用的URL。為此,請(qǐng)使用瀏覽器中的Developer Tools。但這不能保證工作:

    • 可能是url是動(dòng)態(tài)的,并且取決于當(dāng)時(shí)頁面上的內(nèi)容

    • 如果內(nèi)容不公開,將涉及cookie,而僅僅查詢資源URL是不夠的

  2. 在這些情況下,您需要“模擬”瀏覽器的工作。幸運(yùn)的是,存在這樣的工具。我知道并推薦的是PhantomJS。它適用于Javascript,您需要通過啟動(dòng)新進(jìn)程從Java啟動(dòng)它。如果你想堅(jiān)持Java,這篇文章列出了一些Java備選方案。


查看完整回答
反對(duì) 回復(fù) 2019-07-27
  • 3 回答
  • 0 關(guān)注
  • 1283 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)