页面上的一个块被JavaScript内容填充,使用Jsoup加载页面后,没有任何信息。在使用Jsoup
解析页面时,是否有方法获得JavaScript生成的内容?
页面代码太长,无法粘贴到此处:http://pastebin.com/qw4Rfqgw
下面是我需要的内容元素:<div id='tags_list'></div>
我需要在Java中获得此信息。最好使用Jsoup。元素是字段与JavaScript的帮助:
<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();
}
}
}
8条答案
按热度按时间trnvg8h31#
JSoup是一个HTML解析器,而不是某种嵌入式浏览器引擎,这意味着它完全不知道在初始页面加载之后由Javascript添加到DOM中的任何内容。
要访问这种类型的内容,您需要一个嵌入式浏览器组件,关于这种类型的组件,例如Is there a way to embed a browser in Java?,有许多关于SO的讨论
bqf10yzr2#
在我的情况下解决com. codeborne. phantomjsdriver注意:这是很棒代码。
e0uiprwp3#
您需要了解正在发生的情况:
理解这一点的方法如下:解析HTML代码很容易。2执行Javascript代码和更新相应的HTML代码要复杂得多,而且是浏览器的工作。
以下是一些解决此类问题的方法:
htrmnn0y4#
可以组合使用JSoup和HtmlUnit在JavaScript脚本加载完成后获取页面内容。
7fyelxc55#
我事实上有一个“办法”!也许它是更多的“变通办法”比“方式...下面的代码检查 meta属性“REFRESH”和javascript重定向...如果他们中的任何一个存在
RedirectedUrl
变量设置。所以你知道你的目标...然后你可以检索目标页面,并继续...hs1ihplo6#
通过将
JSoup
与另一个框架结合来解释网页是可能的,在我的示例中,我使用的是HtmlUnit
。z3yyvxxp7#
指定用户代理后,我的问题就解决了。
https://github.com/jhy/jsoup/issues/287#issuecomment-12769155
lnlaulya8#
试试看: