利用Selenium+PhantomJS 实现截图
- 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 实现截图的更多相关文章
- python+Selenium PhantomJS网页截图
PhantomJS是一个基于webkit的JavaScript API.它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码.任何你可以在基于webki ...
- [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息
本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...
- [Python爬虫] 之二十五:Selenium +phantomjs 利用 pyquery抓取今日头条网数据
一.介绍 本例子用Selenium +phantomjs爬取今日头条(http://www.toutiao.com/search/?keyword=电视)的资讯信息,输入给定关键字抓取资讯信息. 给定 ...
- [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据
一.介绍 本例子用Selenium +phantomjs爬取界面(https://a.jiemian.com/index.php?m=search&a=index&type=news& ...
- [Python爬虫] 之二十一:Selenium +phantomjs 利用 pyquery抓取36氪网站数据
一.介绍 本例子用Selenium +phantomjs爬取36氪网站(http://36kr.com/search/articles/电视?page=1)的资讯信息,输入给定关键字抓取资讯信息. 给 ...
- [Python爬虫] 之二十:Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据
一.介绍 本例子用Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据()的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯 ...
- [Python爬虫] 之三十一:Selenium +phantomjs 利用 pyquery抓取消费主张信息
一.介绍 本例子用Selenium +phantomjs爬取央视栏目(http://search.cctv.com/search.php?qtext=消费主张&type=video)的信息(标 ...
- [Python爬虫] 之三十:Selenium +phantomjs 利用 pyquery抓取栏目
一.介绍 本例子用Selenium +phantomjs爬取栏目(http://tv.cctv.com/lm/)的信息 二.网站信息 三.数据抓取 首先抓取所有要抓取网页链接,共39页,保存到数据库里 ...
- [Python爬虫] 之二十九:Selenium +phantomjs 利用 pyquery抓取节目信息信息
一.介绍 本例子用Selenium +phantomjs爬取节目(http://tv.cctv.com/epg/index.shtml?date=2018-03-25)的信息 二.网站信息 三.数据抓 ...
随机推荐
- ListView用法总结C#
ListView是个较为复杂的控件 网上教程写的很乱,C#中文资料太匮乏了,小白叔叔觉得有必要自己出一份了. http://blog.sina.com.cn/s/blog_43eb83b901 ...
- python爬去电影天堂恐怖片+游戏
1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...
- window下nginx的常用命令
window nginx 启动 常用命令 2016-05-04 11:11 214人阅读 评论(0) 收藏 举报 分类: nginx(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. 启动 ...
- js控制图片自动缩放,实现铺满盒子,不变形,完全局中
此js一般用于控制图片铺满盒子,但是比例不变,并且绝对局中原理:判断图片的高宽与盒子高宽的大小的关系,然后通过比例来控制图片的缩放及定位<!DOCTYPE html PUBLIC "- ...
- Struts2-整理笔记(五)拦截器、拦截器配置
拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...
- VS2017 调试期间无法获取到变量值查看
只要把勾去掉就能查看变量的值了
- Mac 配置Charles,抓取移动设备数据
有两篇很详细的教程可以参考 Charles 从入门到精通 mac环境下使用Charles抓包Https请求 但是在使用iPhone抓取https数据的时候会出现很多问题,总是提示失败. 需要注意的有: ...
- SQLServer 索引总结
测试案例: SET STATISTICS IO ON SET STATISTICS TIME ON SET STATISTICS PROFILE ON SELECT count(A.CarrierT ...
- vue2 vue-router 组装
适用于vue cli搭建的项目 vue-router模块下载及记录到package.json中: npm i vue-router -D main.js中: import VueRouter from ...
- Ubuntu 16.04 升级 PHP 版本至 7.1
安装swoole扩展,怎么安装到7.0下去了,我本来编译的版本是7.19版本,但是没吃 升级步骤 $ sudo add-apt-repository ppa:ondrej/php $ sudo apt ...