首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >页面内容加载了JavaScript,Jsoup看不到它

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

Stack Overflow用户
提问于 2011-09-21 01:01:19
回答 4查看 58.3K关注 0票数 41

页面上的一个块被JavaScript的内容填充,在用Jsoup加载页面后,没有任何这些信息。有没有办法在用Jsoup解析页面时也获得JavaScript生成的内容?

无法在此处粘贴页面代码,因为它太长:http://pastebin.com/qw4Rfqgw

下面是我需要的内容的元素:<div id='tags_list'></div>

我需要用Java获取这些信息。最好使用Jsoup。在JavaScript的帮助下,元素是字段:

代码语言: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代码:

代码语言:javascript
复制
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();
        }
    }
}
EN

回答 4

Stack Overflow用户

发布于 2013-11-23 18:18:05

我真的有一个“方法”!也许这更像是一种“变通办法”,而不是“一种方式……下面的代码同时检查元属性”刷新“和javascript重定向……如果设置了其中任何一个存在的RedirectedUrl变量,那么您就可以检索目标页面并继续...

代码语言:javascript
复制
    String RedirectedUrl=null;
    Elements meta = page.select("html head meta");
    if (meta.attr("http-equiv").contains("REFRESH")) {
        RedirectedUrl = meta.attr("content").split("=")[1];
    } else {
        if (page.toString().contains("window.location.href")) {
            meta = page.select("script");
            for (Element script:meta) {
                String s = script.data();
                if (!s.isEmpty() && s.startsWith("window.location.href")) {
                    int start = s.indexOf("=");
                    int end = s.indexOf(";");
                    if (start>0 && end >start) {
                        s = s.substring(start+1,end);
                        s =s.replace("'", "").replace("\"", "");        
                        RedirectedUrl = s.trim();
                        break;
                    }
                }
            }
        }
    }

... now retrieve the redirected page again...
票数 1
EN

Stack Overflow用户

发布于 2018-12-06 22:27:15

指定用户代理后,我的问题就解决了。

https://github.com/jhy/jsoup/issues/287#issuecomment-12769155

票数 0
EN

Stack Overflow用户

发布于 2020-01-16 17:23:36

通过将JSoup与另一个框架相结合来解释网页是可能的,在我的示例中,我使用了HtmlUnit

代码语言:javascript
复制
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

...

WebClient webClient = new WebClient();
HtmlPage myPage = webClient.getPage(URL);

Document document = Jsoup.parse(myPage.asXml());
Elements otherLinks = document.select("a[href]");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7488872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档