如何在加载内容后加载HTML

时间:2018-02-14 13:05:50

标签: javascript java html

我正在尝试获取网站上的内容列表(this one,如果有人感兴趣的话)。布局最近发生了变化,现在它们不会同时加载所有内容,但是使用魔法(可能是js)。我目前正在使用JSoup来分析HTML,但我愿意接受建议。

这就是我得到的:

<div class="row" data-v-6e4dbe9e>
 <div class="col-17 podcasts-group" data-v-6e4dbe9e>
  <div class="loading-spinner" data-v-6e4dbe9e>      //the devil himself
   <div class="spinner" data-v-ac3cb376 data-v-6e4dbe9e>
    <div class="rect1" data-v-ac3cb376></div>
    <div class="rect2" data-v-ac3cb376></div>
    <div class="rect3" data-v-ac3cb376></div>
    <div class="rect4" data-v-ac3cb376></div>
    <div class="rect5" data-v-ac3cb376></div>
   </div>
  </div>
  <div mode="in-out" class="transition-group row" data-v-6e4dbe9e>
   //Here should be stuff!
  </div>
 </div>
</div>

实现此目的的代码:

String selector = "div.podcasts-items";
Elements elem = Jsoup.connect(link).get().select(selector)
System.out.println("html: "+elem.html());

这是我想看到的(在页面加载完所有内容后从inspect元素复制):

<div class="row" data-v-6e4dbe9e>
 <div class="col-17 podcasts-group" data-v-6e4dbe9e>
  <!---->  //begone evil!
  <div mode="in-out" class="transition-group row" data-v-6e4dbe9e>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
  </div>
 </div>
</div>

Google并没有多大帮助,因为与微调器等相关的每个内容都与javascript有关。

溶液:

由于JSoup只加载HTML并且不执行任何javascript,因此页面从未有机会加载内容。您必须使用实际的浏览器引擎或像selenium这样的webdriver才能加载数据。

对于这个特定的问题,我可以通过这个网页的API加载Json数据直接获取内容。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么你最好的选择是使用Selenium驱动程序。 Link to similar question