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
?