zoukankan      html  css  js  c++  java
  • Jsoup配合 htmlunit 爬取异步加载的网页

    加入 jsoup 和 htmlunit 的依赖

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.10.2</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.25</version>
    </dependency>



    代码:

    package com.jm.bigdata.util;

    import java.io.IOException;
    import java.util.logging.Level;

    import org.apache.htrace.commons.logging.LogFactory;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;

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

    public class ReptileTools {

        /**
         * 使用htmlunit模拟Chrome并获取全部网页信息
         * @param phoneNumber
         * @return
         */
        public static String searchMobile2(String cookie,String DownloadUrl) {

            String title="";
            Document doc = null;
            try {
                //构造一个webClient 模拟Chrome 浏览器
                WebClient webClient = new WebClient(BrowserVersion.CHROME);
                //屏蔽日志信息
                LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
                java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
                //支持JavaScript
                webClient.getOptions().setJavaScriptEnabled(true);
                webClient.getOptions().setCssEnabled(false);
                webClient.getOptions().setActiveXNative(false);
                webClient.getOptions().setCssEnabled(false);
                webClient.getOptions().setThrowExceptionOnScriptError(false);
                webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
                webClient.getOptions().setTimeout(5000);
                HtmlPage rootPage = webClient.getPage(DownloadUrl);
                //设置一个运行JavaScript的时间
                webClient.waitForBackgroundJavaScript(5000);
                String html = rootPage.asXml();
                doc = Jsoup.parse(html);
                System.out.println(doc);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                return null;
            }
            return title;
        }
    }


    这样我们就可以得到一个包含运行 JavaScript 之后的完整源网页了

  • 相关阅读:
    CSS 背景
    CSS padding 属性
    CSS border 属性和 border-collapse 属性
    CSS margin 属性
    IEnumerable<T> 接口和GetEnumerator 详解
    discuz! X3.4特殊字符乱码解决方案
    Discuz通过修改文章标题更好的实现SEO的方法
    关于Discuz x3.3页面空白解决方法
    discuz x3.3标题的最少字数限制设置方法
    discuz网站前端代码优化思路
  • 原文地址:https://www.cnblogs.com/java-h/p/10880388.html
Copyright © 2011-2022 走看看