C# CSharp用CefSharp开发浏览器--鼠标模拟,自动点击,鼠标移动,鼠标事件
效果:模拟鼠标点击、移动,自动画线。
研究 网络爬虫和一些 验证码破解(人类行为检测) 时候,需要 自动 鼠标点击,鼠标移动等。初步找到个满意的方案,写了个案例。
WinForm程序 内嵌浏览器。并在某在线画图网站上,模拟鼠标 点击,移动,画线。
开发环境
vs2015 + .Net framework 4.5.2 + x64 + CefSharp 71.0.0( CefSharp.Common 71.0.0 +CefSharp.WinForms 71.0.0)
程序是在CefSharp的开源案例(CefSharp.MinimalExample)上修改而来。
https://github.com/cefsharp/CefSharp.MinimalExample
也可以用 Nuget获得 CefSharp
https://www.nuget.org/packages/CefSharp.WinForms/
https://www.nuget.org/packages/CefSharp.Common/
方案
查了一下午资料。度娘很残念,头几条广告不说,前几页内容还重复,越往后几页更不知道是什么鬼内容。Bing搜索,前几页和 度娘差不多内容。。没有什么好的答案。
基本是:
- 第一种。向页面 插入JavaScript代码,用JavaScript函数进行操作。
- 第二种。用Win32 API 模拟发送 windows系统 鼠标事件。
不甚满意。
CefCharp是Chrome的开源浏览器做内核,既然是开源浏览器。不应当用这么别扭的,绕弯的方式实现。
继续研究,查资料。
后来只能翻翻 CarSharp 的源码讨论贴。英文看着挺吃力。还在源码里搜关键字。mouse,click之类。
后来也不记得哪里发现的。总之源码(CefCharp)里有这类函数:
SendMouseClickEvent
SendMouseMoveEvent
后面就是写个案例了。
一个坑
SendMouseWheelEvent 是鼠标滚轮,滚动。
void SendMouseWheelEvent(MouseEvent mouseEvent, int deltaX, int deltaY);
想实现 向下滚动 网页。
deltaY 设置 200 没反应。设500 没反应。设 50 没反应。
检查来 检查去,好几边,没发现哪里有错误。
偶然把页面滚到底部。结果 这货自动滚上去了。滚上去了。上去了。
NMD deltaY 要设 负数。后来一想。鼠标事件里,deltaY这个量 应该是滚轮 滚动量,并不是 页面或者屏幕的坐标量。坐标系不同啊。
代码
namespace CefSharp.MinimalExample.WinForms
{
//官方的开源案例
public partial class BrowserForm : Form
{
private readonly ChromiumWebBrowser browser;//CefSharp浏览器
public BrowserForm()
{
InitializeComponent();
Text = "CefSharp";
WindowState = FormWindowState.Maximized;
//在线画板 http://www.atool.org/canvas.php
browser = new