C#调用JS实现滚动截屏-页面和页面元素通用
来源:互联网 发布:失业金数据是什么 编辑:程序博客网 时间:2024/06/06 13:59
/// <summary>
/// 滚动的方式截取页面中指定的元素如:Div的整个元素截屏
/// </summary>
/// <param name="ngdriver"></param>
/// <param name="JS_Element">指定需要截屏的元素,例如:document.getElementsByClassName('gridster dashboard-main ready')[0]</param>
/// <returns></returns>
public static Bitmap TakeTotalElementScreenshot(NgWebDriver ngdriver, string JS_Element)
{
Bitmap ImageBmp = null;
try
{
//获取指定控件/元素的整体高度和宽度
int totalWidth = Convert.ToInt32(((IJavaScriptExecutor)ngdriver.WrappedDriver).ExecuteScript("var e=" + JS_Element + ";return e.scrollWidth").ToString());
int totalHeight = Convert.ToInt32(((IJavaScriptExecutor)ngdriver.WrappedDriver).ExecuteScript("var e=" + JS_Element + ";return e.scrollHeight").ToString());
// 获取指定控件/元素在可视的窗口高度和宽度
int viewWidth = Convert.ToInt32(((IJavaScriptExecutor)ngdriver).ExecuteScript("var e=" + JS_Element + ";return e.clientWidth").ToString());
int viewHeight = Convert.ToInt32(((IJavaScriptExecutor)ngdriver).ExecuteScript("var e=" + JS_Element + ";return e.clientHeight").ToString());
List<Rectangle> rectangleList = new List<Rectangle>();
// 高度处理:循环滚动直到达到页面底部
for (int i = 0; i < totalHeight; i += viewHeight)
{
int newHeight = viewHeight;
// 最后一个区域的处理
if (i + viewHeight > totalHeight)
{
newHeight = totalHeight - i;
}
// 宽度处理:循环滚动直到达到页面最右侧
for (int ii = 0; ii < totalWidth; ii += viewWidth)
{
int newWidth = viewWidth;
//最后一个区域的处理
if (ii + viewWidth > totalWidth)
{
newWidth = totalWidth - ii;
}
// 创建局部区域
Rectangle currRect = new Rectangle(ii, i, newWidth, newHeight);
rectangleList.Add(currRect);
}
}
// 拼接图片
ImageBmp = new Bitmap(totalWidth, totalHeight);
//获取所有区域然后拼接成一个整体图片
Rectangle previous = Rectangle.Empty;
foreach (var rectangle in rectangleList)
{
if (previous != Rectangle.Empty)
{
int xDiff = rectangle.Right - previous.Right;
int yDiff = rectangle.Bottom - previous.Bottom;
//滚动滚动条,View下一区域
((IJavaScriptExecutor)ngdriver).ExecuteScript(String.Format("var e=" + JS_Element + "; e.scrollBy({0}, {1})", xDiff, yDiff));
System.Threading.Thread.Sleep(500);
}
// 执行截屏
var screenshot = ((ITakesScreenshot)ngdriver.WrappedDriver).GetScreenshot();
Image screenshotImage;
using (MemoryStream memStream = new MemoryStream(screenshot.AsByteArray))
{
screenshotImage = Image.FromStream(memStream);
}
Rectangle sourceRectangle = new Rectangle(viewWidth - rectangle.Width, viewHeight - rectangle.Height, rectangle.Width, rectangle.Height);
using (Graphics gph = Graphics.FromImage(ImageBmp))
{
gph.DrawImage(screenshotImage, rectangle, sourceRectangle, GraphicsUnit.Pixel);
}
previous = rectangle;
}
}
catch { }
return ImageBmp;
}
- C#调用JS实现滚动截屏-页面和页面元素通用
- 整理JS和C#实现页面跳转
- C# ActiveX 调用页面JS
- 页面元素滚动条
- 在C#的ajax中的timer触发函数中怎样调用页面元素和引用JS脚本函数?
- JS iframe父子页面元素调用方法
- JS iframe父子页面元素调用方法
- velocity.js实现页面滚动切换效果
- js 实现弹框后页面不滚动
- JS 实现鼠标滚动页面跳转
- JS实现页面数值滚动显示
- 页面校验通用js
- js/jquery获取页面大小,滚动条位置,元素位置
- js 双击滚动页面
- 实现页面元素拖放功能的JS
- C#后台调用前台页面js方法
- C#后台调用前台页面js方法
- 页面元素滚动真实展现
- 第七周项目四 队列数组
- 第1006期机器学习日报(2017-06-20)
- 第1007期机器学习日报(2017-06-21)
- 第1008期机器学习日报(2017-06-22)
- web_custom_request函数语法详解
- C#调用JS实现滚动截屏-页面和页面元素通用
- Representation Learning在优酷个性化搜索排序中的应用
- 第1009期机器学习日报(2017-06-23)
- 数据结构第三周项目--求集合并集
- 第1010期机器学习日报(2017-06-24)
- spring beans源码解读之--总结篇
- 第1011期机器学习日报(2017-06-25)
- myeclipse中快捷加入getset方法的快捷键
- Google官方MVP示例之TODO-MVP