页面内容加载了JavaScript,Jsoup看不到它

页面内容加载了JavaScript,Jsoup看不到它

页面上的一个块由JavaScript填充内容,在使用Jsoup加载页面后,没有任何信息。有没有办法在解析页面时获取JavaScript生成的内容Jsoup

无法粘贴页面代码,因为它太长了: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();
        }
    }}


梵蒂冈之花
浏览 1316回答 3
3回答

慕尼黑5688855

JSoup是一个HTML解析器,而不是某种嵌入式浏览器引擎。这意味着它完全没有意识到在初始页面加载后由Javascript添加到DOM的任何内容。要访问这种类型的内容,您需要一个嵌入式浏览器组件,关于这种组件有很多关于SO的讨论,例如,有没有办法在Java中嵌入浏览器?

红糖糍粑

用com.codeborne.phantomjsdriver解决了我的情况注意:它是groovy代码。的pom.xml&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<dependency> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<groupId>com.codeborne</groupId> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<artifactId>phantomjsdriver</artifactId> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<version>&nbsp;<here&nbsp;goes&nbsp;last&nbsp;version>&nbsp;</version> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</dependency>PhantomJsUtils.groovyimport&nbsp;org.jsoup.Jsoupimport&nbsp;org.jsoup.nodes.Documentimport&nbsp;org.openqa.selenium.WebDriverimport&nbsp;org.openqa.selenium.phantomjs.PhantomJSDriverclass&nbsp;PhantomJsUtils&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;filePath&nbsp;=&nbsp;'data/temp/'; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Document&nbsp;renderPage(String&nbsp;filePath)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty("phantomjs.binary.path",&nbsp;'libs/phantomjs')&nbsp;//&nbsp;path&nbsp;to&nbsp;bin&nbsp;file.&nbsp;NOTE:&nbsp;platform&nbsp;dependent &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebDriver&nbsp;ghostDriver&nbsp;=&nbsp;new&nbsp;PhantomJSDriver(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ghostDriver.get(filePath); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Jsoup.parse(ghostDriver.getPageSource()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ghostDriver.quit(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Document&nbsp;renderPage(Document&nbsp;doc)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmpFileName&nbsp;=&nbsp;"$filePath${Calendar.getInstance().timeInMillis}.html"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileUtils.writeToFile(tmpFileName,&nbsp;doc.toString()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;renderPage(tmpFileName); &nbsp;&nbsp;&nbsp;&nbsp;}}ClassInProject.groovyDocument&nbsp;doc&nbsp;=&nbsp;PhantomJsUtils.renderPage(Jsoup.parse(yourSource))

肥皂起泡泡

你需要了解发生了什么:当您从网站查询页面时,无论是使用Jsoup还是浏览器,返回给您的是一些HTML。Jsoup能够解析它。但是,大多数网站都包含该HTML中的Javascript,或者从该HTML链接,该HTML将使用内容填充页面。您的浏览器能够执行Javascript,从而填充页面。Jsoup不是。理解这一点的方法如下:解析HTML代码很容易。执行Javascript代码和更新相应的HTML代码要复杂得多,并且是浏览器的工作。以下是针对此类问题的一些解决方案:如果您可以找到Javascript代码正在进行的Ajax调用,即加载内容,您可以使用Jsoup使用这些调用的URL。为此,请使用浏览器中的Developer Tools。但这不能保证工作:可能是url是动态的,并且取决于当时页面上的内容如果内容不公开,将涉及cookie,而仅仅查询资源URL是不够的在这些情况下,您需要“模拟”浏览器的工作。幸运的是,存在这样的工具。我知道并推荐的是PhantomJS。它适用于Javascript,您需要通过启动新进程从Java启动它。如果你想坚持Java,这篇文章列出了一些Java备选方案。
打开App,查看更多内容
随时随地看视频慕课网APP