1、编写资源文件Auto.js文件,嵌入资源文件,获取图像的Base64编码
var __auto__ = (function () {
var auto = {};
/*获取图像的Base64编码。注意:在获取图像时可以对图像进行缩放。*/
auto.getImage = function (id, width, height) {
var img = document.getElementById(id) || document.getElementsByClassName(id)[0];
if (!img) return null;
width = width | img.width;
height = height | img.height;
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);
var dataUrl = canvas.toDataURL('image/jpg');
return dataUrl.replace('data:image/png;base64,', '');
};
return auto;
})();
2、注入auto.js脚本
/// <summary>
/// 注入auto.js脚本
/// </summary>
protected bool InjectAutoJs(string id = "__autoJs__")
{
/*1.1 检查页面是否加载完毕*/
var document = WebBrowser.Document;
if (document == null) return false;
var body = document.Body;
if (body == null) return false;
/*1.2 检查是否已经注入过*/
if (document.GetElementById(id) != null) return true;
/*1.3 检查资源文件*/
var text = GetResource("Auto.js");
if (string.IsNullOrEmpty(text)) return false;
/*2 开始注入*/
var script = document.CreateElement("script");
if (script == null) return false;
script.Id = id;
script.SetAttribute("type", "text/javascript");
script.SetAttribute("text", text);
body.AppendChild(script);
return true;
}
3、调用脚本函数
/// <summary>
/// 调用auto.js脚本中的函数
/// </summary>
public object Call(string name, params object[] args)
{
if (!InjectAutoJs()) return null;
var @params = GetArguments(args);
var script = $"__auto__.{name}({string.Join(",", @params)})";
var result = Eval(script);
return result;
}
4、Eval函数
/// <summary>
/// 使用Eval执行任意脚本
/// </summary>
public object Eval(string script)
{
var document = WebBrowser.Document;
if (document == null) return null;
var result = document.InvokeScript("eval", new object[] { script });
return result;
}
5、调用函数
/// <summary>
/// 获取浏览器中的图像
/// <param name="id">元素的id或class</param>
/// </summary>
public Image GetImage(string id)
{
var base64 = (string)Call("getImage", id);
if (string.IsNullOrEmpty(base64)) return null;
var buffer = Base64.Decoded(base64);
var img = new Bitmap(new MemoryStream(buffer));
return img;
}
6、获取固定大小的图片
/// <summary>
/// 获取固定大小的图片
/// </summary>
/// <param name="img">原有的图片</param>
/// <param name="width">图片宽</param>
/// <param name="heigth">图片高</param>
/// <returns></returns>
public Image GetFixedImage(Image img, int width, int heigth)
{
var newImage = new Bitmap(width, heigth);
var g = Graphics.FromImage(newImage);
g.DrawImage(img, new Rectangle(0, 0, newImage.Width, newImage.Height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);
return newImage;
}