1. using OpenQA.Selenium;
  2. using OpenQA.Selenium.PhantomJS;
  3. using System;
  4. using System.Drawing;
  5. using System.Drawing.Imaging;
  6. using System.IO;
  7. using System.Threading.Tasks;
  8.  
  9. namespace WebKitTest
  10. {
  11. internal class Program
  12. {
  13. private static void Main(string[] args)
  14. {
  15. Parallel.For(, , i =>
  16. {
  17. var url = "http://www.baidu.com";
  18. IWebDriver driver = new PhantomJSDriver(GetPhantomJSDriverService());
  19. driver.Navigate().GoToUrl(url);
  20. ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;
  21. Screenshot screenshot = screenshotDriver.GetScreenshot();
  22. using (MemoryStream stream = new MemoryStream(screenshot.AsByteArray))
  23. {
  24. using (var soourceImage = Image.FromStream(stream))
  25. {
  26. var cutedImage = GetReducedImage(, , soourceImage);
  27. if (cutedImage != null)
  28. {
  29. cutedImage.Save(AppDomain.CurrentDomain.BaseDirectory + "//" + i.ToString() + ".jpg", ImageFormat.Jpeg);
  30. }
  31. }
  32. }
  33. });
  34. for (int i = ; i < ; i++)
  35. {
  36. }
  37. Console.Read();
  38. }
  39.  
  40. private static PhantomJSDriverService GetPhantomJSDriverService()
  41. {
  42. PhantomJSDriverService pds = PhantomJSDriverService.CreateDefaultService();
  43. //设置代理服务器地址
  44. //pds.Proxy = $"{ip}:{port}";
  45. //设置代理服务器认证信息
  46. //pds.ProxyAuthentication = GetProxyAuthorization();
  47. return pds;
  48. }
  49.  
  50. /// <summary>
  51. /// 生成缩略图重载方法1,返回缩略图的Image对象
  52. /// </summary>
  53. /// <param name="targetWidth">缩略图的宽度</param>
  54. /// <param name="targetHeight">缩略图的高度</param>
  55. /// <returns>缩略图的Image对象</returns>
  56. public static Image GetReducedImage(int targetWidth, int targetHeight, Image sourceImage)
  57. {
  58. try
  59. {
  60. //用指定的大小和格式初始化Bitmap类的新实例
  61. Bitmap bitmap = new Bitmap(targetWidth, targetHeight, PixelFormat.Format32bppArgb);
  62. //从指定的Image对象创建新Graphics对象
  63. using (Graphics graphics = Graphics.FromImage(bitmap))
  64. {
  65. //清除整个绘图面并以透明背景色填充
  66. graphics.Clear(Color.Transparent);
  67. //在指定位置并且按指定大小绘制原图片对象
  68.  
  69. int sourceWidth = sourceImage.Width;
  70. int sourceHeight = sourceImage.Height;
  71. int sourceStartX = ;
  72. int targetStartX = ;
  73. int sourceStartY = ;
  74. int targetStartY = ;
  75. int sourceEndX = ;
  76. int targetEndX = ;
  77. int sourceEndY = ;
  78. int targetEndY = ;
  79. if (sourceWidth <= targetWidth)
  80. {
  81. sourceStartX = ;
  82. targetStartX = (targetWidth - sourceWidth) / ;
  83. sourceEndX = sourceWidth;
  84. targetEndX = sourceWidth + targetStartX;
  85. }
  86. else
  87. {
  88. sourceStartX = (sourceWidth - targetWidth) / ;
  89. targetStartX = ;
  90. sourceEndX = targetWidth + sourceStartX;
  91. targetEndX = targetWidth;
  92. }
  93. if (targetEndX - sourceStartX > targetWidth)
  94. {
  95. targetEndX = targetWidth - sourceStartX;
  96. }
  97.  
  98. if (sourceHeight <= targetHeight)
  99. {
  100. sourceEndY = sourceHeight;
  101. targetEndY = sourceHeight;
  102. }
  103. else
  104. {
  105. sourceEndY = targetHeight;
  106. targetEndY = targetHeight;
  107. }
  108. Rectangle destRect = new Rectangle(targetStartX, targetStartY, targetEndX - targetStartX, targetEndY - targetStartY);//矩形容器
  109. Rectangle srcRect = new Rectangle(sourceStartX, sourceStartY, sourceEndX - sourceStartX, sourceEndY - sourceStartY);
  110.  
  111. graphics.DrawImage(sourceImage, destRect, srcRect, GraphicsUnit.Pixel);
  112. return bitmap;
  113. }
  114. }
  115. catch (Exception e)
  116. {
  117. return null;
  118. }
  119. }
  120. }
  121. }

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. ListView用法总结C#

    ListView是个较为复杂的控件     网上教程写的很乱,C#中文资料太匮乏了,小白叔叔觉得有必要自己出一份了. http://blog.sina.com.cn/s/blog_43eb83b901 ...

  2. python爬去电影天堂恐怖片+游戏

    1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...

  3. window下nginx的常用命令

    window nginx 启动 常用命令 2016-05-04 11:11 214人阅读 评论(0) 收藏 举报 分类: nginx(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. 启动 ...

  4. js控制图片自动缩放,实现铺满盒子,不变形,完全局中

    此js一般用于控制图片铺满盒子,但是比例不变,并且绝对局中原理:判断图片的高宽与盒子高宽的大小的关系,然后通过比例来控制图片的缩放及定位<!DOCTYPE html PUBLIC "- ...

  5. Struts2-整理笔记(五)拦截器、拦截器配置

    拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...

  6. VS2017 调试期间无法获取到变量值查看

    只要把勾去掉就能查看变量的值了

  7. Mac 配置Charles,抓取移动设备数据

    有两篇很详细的教程可以参考 Charles 从入门到精通 mac环境下使用Charles抓包Https请求 但是在使用iPhone抓取https数据的时候会出现很多问题,总是提示失败. 需要注意的有: ...

  8. SQLServer 索引总结

    测试案例: SET STATISTICS IO ON SET STATISTICS TIME ON SET STATISTICS PROFILE ON SELECT  count(A.CarrierT ...

  9. vue2 vue-router 组装

    适用于vue cli搭建的项目 vue-router模块下载及记录到package.json中: npm i vue-router -D main.js中: import VueRouter from ...

  10. Ubuntu 16.04 升级 PHP 版本至 7.1

    安装swoole扩展,怎么安装到7.0下去了,我本来编译的版本是7.19版本,但是没吃 升级步骤 $ sudo add-apt-repository ppa:ondrej/php $ sudo apt ...