PhantomJS 学习笔记(2):生成网页截图
27 Nov 2012网上有使用C#调用phantomjs来批量生成网站截图的,可以来供界面设计师参考~
核心的截取代码如下:其实也就是官方的一个demo~
不过有时候对中文不够支持,比如截取baidu,会产生乱码。
var page = require('webpage').create(), system = require('system'), address, output, size; if (system.args.length < 3 || system.args.length > 5) { console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]'); console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"'); phantom.exit(1); } else { address = system.args[1]; output = system.args[2]; page.viewportSize = { width: 600, height: 600 }; if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") { size = system.args[3].split('*'); page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' } : { format: system.args[3], orientation: 'portrait', margin: '1cm' }; } if (system.args.length > 4) { page.zoomFactor = system.args[4]; } page.open(address, function (status) { if (status !== 'success') { console.log('Unable to load the address!'); } else { window.setTimeout(function () { page.render(output); phantom.exit(); }, 200); } }); }
使用命令:matoMacBook-Pro:examples Flowerowl$ phantomjs rasterize.js http://baidu.com logo.gif
运行截图:
C#调用版:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; using System.Diagnostics; namespace WebScreen { public partial class Main : Form { public Main() { InitializeComponent(); } public static List<string> list_Url = new List<string>(); private void Main_Load(object sender, EventArgs e) { loadList(); } List<string> list_url_temp = new List<string>(); private void button_Start_Click(object sender, EventArgs e) { Thread th = new Thread(_StartTest); th.IsBackground = false; th.Start(); } void _StartTest() { if (list_Url.Count > 0) { this.BeginInvoke((MethodInvoker)delegate { list_Msg.Items.Add("开始进行任务"); }); foreach (string url in list_Url) { this.BeginInvoke((MethodInvoker)delegate { list_Msg.Items.Add("正在进行[" + url + "]站点截图"); }); DateTime beginTime = DateTime.Now; string Image = url; GetImage(url); int ii = 0; while (true) { if (File.Exists("pic/" + url + ".png")) { break; } else { if (ii > 60) { break; } Thread.Sleep(1000); ii++; } } DateTime endTime = DateTime.Now; TimeSpan ts = endTime.Subtract(beginTime); this.BeginInvoke((MethodInvoker)delegate { list_Msg.Items.Add("[" + Image + "]站点截图已保存,耗时:" + ts.TotalMilliseconds + "毫秒"); }); } this.BeginInvoke((MethodInvoker)delegate { list_Msg.Items.Add("所有任务已经完成"); }); Process.Start("explorer.exe", Environment.CurrentDirectory + "\\pic\\"); } else { MessageBox.Show("列表无数据"); } } private void GetImage(string url) { string links = url.IndexOf("http://") > -1 ? url : "http://" + url; #region 启动进程 Process p = new Process(); p.StartInfo.FileName = Environment.CurrentDirectory+"//phantomjs.exe"; p.StartInfo.WorkingDirectory = Environment.CurrentDirectory+"//pic//"; p.StartInfo.Arguments = string.Format("--ignore-ssl-errors=yes --load-plugins=yes " + Environment.CurrentDirectory + "//rasterize.js " + links + " "+url+".png"); p.StartInfo.CreateNoWindow = true; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; if (!p.Start()) throw new Exception("无法Headless浏览器."); #endregion } private void button_List_Click(object sender, EventArgs e) { UrlList form_UrlList = new UrlList(list_Url); form_UrlList.ShowDialog(); list_Url = form_UrlList.list; this.Text = "检测网页数量:" + list_Url.Count; } private static void savelist() { lock (list_Url) { using (FileStream fs = new FileStream("url.list", FileMode.Create)) { if (list_Url != null) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, list_Url); } } } } private static void loadList() { lock (list_Url) { list_Url.Clear(); if (File.Exists("url.list")) { using (FileStream fs = new FileStream("url.list", FileMode.OpenOrCreate)) { BinaryFormatter formatter = new BinaryFormatter(); list_Url = (List<string>)formatter.Deserialize(fs); } } } } private void Main_FormClosing(object sender, FormClosingEventArgs e) { savelist(); } } }
源码参考:http://www.cnblogs.com/yesicoo/archive/2012/05/25/2518729.html
运行截图:
转载请注明:于哲的博客 » PhantomJS 学习笔记(2):生成网页截图