using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Threading.Tasks; namespace WebKitTest
{
internal class Program
{
private static void Main(string[] args)
{
Parallel.For(, , i =>
{
var url = "http://www.baidu.com";
IWebDriver driver = new PhantomJSDriver(GetPhantomJSDriverService());
driver.Navigate().GoToUrl(url);
ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;
Screenshot screenshot = screenshotDriver.GetScreenshot();
using (MemoryStream stream = new MemoryStream(screenshot.AsByteArray))
{
using (var soourceImage = Image.FromStream(stream))
{
var cutedImage = GetReducedImage(, , soourceImage);
if (cutedImage != null)
{
cutedImage.Save(AppDomain.CurrentDomain.BaseDirectory + "//" + i.ToString() + ".jpg", ImageFormat.Jpeg);
}
}
}
});
for (int i = ; i < ; i++)
{
}
Console.Read();
} private static PhantomJSDriverService GetPhantomJSDriverService()
{
PhantomJSDriverService pds = PhantomJSDriverService.CreateDefaultService();
//设置代理服务器地址
//pds.Proxy = $"{ip}:{port}";
//设置代理服务器认证信息
//pds.ProxyAuthentication = GetProxyAuthorization();
return pds;
} /// <summary>
/// 生成缩略图重载方法1,返回缩略图的Image对象
/// </summary>
/// <param name="targetWidth">缩略图的宽度</param>
/// <param name="targetHeight">缩略图的高度</param>
/// <returns>缩略图的Image对象</returns>
public static Image GetReducedImage(int targetWidth, int targetHeight, Image sourceImage)
{
try
{
//用指定的大小和格式初始化Bitmap类的新实例
Bitmap bitmap = new Bitmap(targetWidth, targetHeight, PixelFormat.Format32bppArgb);
//从指定的Image对象创建新Graphics对象
using (Graphics graphics = Graphics.FromImage(bitmap))
{
//清除整个绘图面并以透明背景色填充
graphics.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片对象 int sourceWidth = sourceImage.Width;
int sourceHeight = sourceImage.Height;
int sourceStartX = ;
int targetStartX = ;
int sourceStartY = ;
int targetStartY = ;
int sourceEndX = ;
int targetEndX = ;
int sourceEndY = ;
int targetEndY = ;
if (sourceWidth <= targetWidth)
{
sourceStartX = ;
targetStartX = (targetWidth - sourceWidth) / ;
sourceEndX = sourceWidth;
targetEndX = sourceWidth + targetStartX;
}
else
{
sourceStartX = (sourceWidth - targetWidth) / ;
targetStartX = ;
sourceEndX = targetWidth + sourceStartX;
targetEndX = targetWidth;
}
if (targetEndX - sourceStartX > targetWidth)
{
targetEndX = targetWidth - sourceStartX;
} if (sourceHeight <= targetHeight)
{
sourceEndY = sourceHeight;
targetEndY = sourceHeight;
}
else
{
sourceEndY = targetHeight;
targetEndY = targetHeight;
}
Rectangle destRect = new Rectangle(targetStartX, targetStartY, targetEndX - targetStartX, targetEndY - targetStartY);//矩形容器
Rectangle srcRect = new Rectangle(sourceStartX, sourceStartY, sourceEndX - sourceStartX, sourceEndY - sourceStartY); graphics.DrawImage(sourceImage, destRect, srcRect, GraphicsUnit.Pixel);
return bitmap;
}
}
catch (Exception e)
{
return null;
}
}
}
}

private static void Main(string[] args)        {            Parallel.For(0, 20, i =>            {                var url = "http://www.baidu.com";                IWebDriver driver = new PhantomJSDriver(GetPhantomJSDriverService());                driver.Navigate().GoToUrl(url);                ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;                Screenshot screenshot = screenshotDriver.GetScreenshot();                using (MemoryStream stream = new MemoryStream(screenshot.AsByteArray))                {                    using (var soourceImage = Image.FromStream(stream))                    {                        var cutedImage = GetReducedImage(800, 800, soourceImage);                        if (cutedImage != null)                        {                            cutedImage.Save(AppDomain.CurrentDomain.BaseDirectory + "//" + i.ToString() + ".jpg", ImageFormat.Jpeg);                        }                    }                }            });            for (int i = 0; i < 100; i++)            {            }            Console.Read();        }
        private static PhantomJSDriverService GetPhantomJSDriverService()        {            PhantomJSDriverService pds = PhantomJSDriverService.CreateDefaultService();            //设置代理服务器地址            //pds.Proxy = $"{ip}:{port}";            //设置代理服务器认证信息            //pds.ProxyAuthentication = GetProxyAuthorization();            return pds;        }
        /// <summary>        /// 生成缩略图重载方法1,返回缩略图的Image对象        /// </summary>        /// <param name="targetWidth">缩略图的宽度</param>        /// <param name="targetHeight">缩略图的高度</param>        /// <returns>缩略图的Image对象</returns>        public static Image GetReducedImage(int targetWidth, int targetHeight, Image sourceImage)        {            try            {                //用指定的大小和格式初始化Bitmap类的新实例                Bitmap bitmap = new Bitmap(targetWidth, targetHeight, PixelFormat.Format32bppArgb);                //从指定的Image对象创建新Graphics对象                using (Graphics graphics = Graphics.FromImage(bitmap))                {                    //清除整个绘图面并以透明背景色填充                    graphics.Clear(Color.Transparent);                    //在指定位置并且按指定大小绘制原图片对象
                    int sourceWidth = sourceImage.Width;                    int sourceHeight = sourceImage.Height;                    int sourceStartX = 0;                    int targetStartX = 0;                    int sourceStartY = 0;                    int targetStartY = 0;                    int sourceEndX = 0;                    int targetEndX = 0;                    int sourceEndY = 0;                    int targetEndY = 0;                    if (sourceWidth <= targetWidth)                    {                        sourceStartX = 0;                        targetStartX = (targetWidth - sourceWidth) / 2;                        sourceEndX = sourceWidth;                        targetEndX = sourceWidth + targetStartX;                    }                    else                    {                        sourceStartX = (sourceWidth - targetWidth) / 2;                        targetStartX = 0;                        sourceEndX = targetWidth + sourceStartX;                        targetEndX = targetWidth;                    }                    if (targetEndX - sourceStartX > targetWidth)                    {                        targetEndX = targetWidth - sourceStartX;                    }
                    if (sourceHeight <= targetHeight)                    {                        sourceEndY = sourceHeight;                        targetEndY = sourceHeight;                    }                    else                    {                        sourceEndY = targetHeight;                        targetEndY = targetHeight;                    }                    Rectangle destRect = new Rectangle(targetStartX, targetStartY, targetEndX - targetStartX, targetEndY - targetStartY);//矩形容器                    Rectangle srcRect = new Rectangle(sourceStartX, sourceStartY, sourceEndX - sourceStartX, sourceEndY - sourceStartY);
                    graphics.DrawImage(sourceImage, destRect, srcRect, GraphicsUnit.Pixel);                    return bitmap;                }            }            catch (Exception e)            {                return null;            }        }

利用Selenium+PhantomJS 实现截图的更多相关文章

  1. python+Selenium PhantomJS网页截图

    PhantomJS是一个基于webkit的JavaScript API.它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码.任何你可以在基于webki ...

  2. [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息

    本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...

  3. [Python爬虫] 之二十五:Selenium +phantomjs 利用 pyquery抓取今日头条网数据

    一.介绍 本例子用Selenium +phantomjs爬取今日头条(http://www.toutiao.com/search/?keyword=电视)的资讯信息,输入给定关键字抓取资讯信息. 给定 ...

  4. [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据

    一.介绍 本例子用Selenium +phantomjs爬取界面(https://a.jiemian.com/index.php?m=search&a=index&type=news& ...

  5. [Python爬虫] 之二十一:Selenium +phantomjs 利用 pyquery抓取36氪网站数据

    一.介绍 本例子用Selenium +phantomjs爬取36氪网站(http://36kr.com/search/articles/电视?page=1)的资讯信息,输入给定关键字抓取资讯信息. 给 ...

  6. [Python爬虫] 之二十:Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据

    一.介绍 本例子用Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据()的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯 ...

  7. [Python爬虫] 之三十一:Selenium +phantomjs 利用 pyquery抓取消费主张信息

    一.介绍 本例子用Selenium +phantomjs爬取央视栏目(http://search.cctv.com/search.php?qtext=消费主张&type=video)的信息(标 ...

  8. [Python爬虫] 之三十:Selenium +phantomjs 利用 pyquery抓取栏目

    一.介绍 本例子用Selenium +phantomjs爬取栏目(http://tv.cctv.com/lm/)的信息 二.网站信息 三.数据抓取 首先抓取所有要抓取网页链接,共39页,保存到数据库里 ...

  9. [Python爬虫] 之二十九:Selenium +phantomjs 利用 pyquery抓取节目信息信息

    一.介绍 本例子用Selenium +phantomjs爬取节目(http://tv.cctv.com/epg/index.shtml?date=2018-03-25)的信息 二.网站信息 三.数据抓 ...

随机推荐

  1. php中static 静态关键字

    一直依赖对于php中static关键字比较模糊,只是在单例模式中用过几次.上网查了查,没有找到很全的介绍,自己总结一下. 根据使用位置分为两部分 1.函数体中的静态变量 2.类中的静态属性和方法 1 ...

  2. python模拟shell执行脚本

    工作时候需要模拟shell来执行任务,借助包paramkio import paramiko class ShellExec(object): host = '127.0.0.1' port = 36 ...

  3. java方向及学习方法

    随笔:由于回首最近刚刚上班的缘故,平时基本没时间上播客了,所以回首会定期的抽时间分享一些干货给朋友们,就是周期不会像之前那么频繁了.最近有朋友跟回首说想没事儿的时候自学Java,但苦于不知道怎么去学, ...

  4. 小程序语音红包中遇到的 语音识别silk转wav格式 如何在线转 或者mp3转wav格式

    公司在开发一个小程序语音红包,现在遇到的问题就是通过微信的小程序文档接口拿到的录音文件要么是silk格式的,要么是mp3格式的 但是呢,如果要调用百度的语音接口,又必须是wav格式的.也就是说通过微信 ...

  5. SQL server Error Number

    描述 HY000 所有绑定列都是只读的. 必须是可升级的列,以使用 SQLSetPos 或 SQLBulkOperations 更改或插入行. HY000 已检测到一个旧 netlib (%s).请删 ...

  6. Python新式类与经典类的区别

    1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性:反之,即不由任意内置类型派生出的类 ...

  7. [js高手之路]html5 canvas动画教程 - 重力、摩擦力、加速、抛物线运动

    上节,我们讲了匀速运动,本节分享的运动就更有意思了: 加速运动 重力加速度 抛物线运动 摩擦力 加速运动: <head> <meta charset='utf-8' /> &l ...

  8. Flask知识点一

    1 flask安装 pip3 install falsk 一Werkzeug Werkzeug是什么? Werkzeug就是Python对WSGI的实现的一个通用库,它是Flask所使用的底层WSGI ...

  9. .NET使用Office Open XML导出超大数量数据到 Excel

    我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...

  10. Linux进程关系(转载)

    Linux的进程相互之间有一定的关系.比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构.我们在这里讲解进程组和会话,以便以更加丰富的方式了 ...