读书人

JAVA线程依据给定URL生成网页快照

发布时间: 2013-11-12 12:10:37 作者: rapoo

JAVA线程根据给定URL生成网页快照

最近项目中遇到这样一个需求,根据一个动态的URL来生成对应的网页快照。网上找了很多资料,最终采用如下方法解决。

生成原理:将动态URL的页面先生成HTML文件,然后再根据生成的HTML生成快照。生成的HTML中必须有值如:<div>test<div>,不能通过JS或JSON的方式给页面元素赋值,否则生成的(快照)图片会是空白的。

缺点:可能由于网络不畅通等原因造成生成快照失败。

部分源码如下(附件中有完整源码):

?

/** * JAVA线程根据给定URL生成网页快照 * User: GQ * Date: 13-10-31 * Time: 下午10:45 * To change this template use File | Settings | File Templates. */import snapshot.model.Page;import java.util.Timer;public class Test {    private TaskQueue<Page> queue;    private Timer timer;    protected void setUp() {        queue = new TaskQueue<Page>();        queue.put(new Page("微软", "http://www.microsoft.com/"));        queue.put(new Page("MOP", "http://www.mop.com/"));        queue.put(new Page("MSN", "http://www.msn.com/"));        queue.put(new Page("阿里巴巴", "http://www.alibaba.com/"));        queue.put(new Page("淘宝", "http://www.taobao.com/"));        queue.put(new Page("百度", "http://www.baidu.com/"));        queue.put(new Page("谷歌", "http://www.google.com/"));        queue.put(new Page("腾讯", "http://www.qq.com/"));        queue.put(new Page("新浪", "http://www.sina.com/"));        queue.put(new Page("SPRING", "http://www.springframework.org/"));        queue.put(new Page("网易", "http://www.163.com/"));    }    public void setRun() {        timer = new Timer();        SnapshotProcessorDeamon deamon = new SnapshotProcessorDeamon();        deamon.setAvgmax(2);        //File f = new File(this.getClass().getResource("/").getPath()); // 获取类加载的根路径 例如:D:/IdeaProjects/cdby_wan/WebRoot/WEB-INF/classes        //deamon.setExec(f.toString().replaceAll("\\\\","/")+"/IECapt.exe");        deamon.setExec("c:\\IECapt.exe");        deamon.setMax(5);        deamon.setImageRoot("c:/snapshot/");        deamon.setTaskQueue(queue);        deamon.setTime(1000l);        deamon.setTimeout(20000l);        timer.schedule(deamon, 10000, 10000);        do {            try {                Thread.sleep(11000l);            } catch (InterruptedException e) {                e.printStackTrace();            }        } while (deamon.getProcessorCount() > 0);    }    /**     * @param args     */    public static void main(String[] args) {        long start = System.currentTimeMillis();        System.out.println("开始时间:" + start);        Test t = new Test();        t.setUp();        t.setRun();        long end = System.currentTimeMillis();        System.out.println("结束时间:" + end);        System.out.println("花费时间:" + (end - start) / 1000 + "秒");    }}

?

根据动态URL生成HTML,请参考:http://gqsunrise.iteye.com/admin/blogs/1968228

?

读书人网 >编程

热点推荐