我正在尝试使用HTML5
在canvas
SendMouseClickEvent
上模拟点击事件,但是尽管有时候可以,但是有时不起作用。这是我用来模拟点击的代码段:
browser.GetBrowser().GetHost().SendMouseMoveEvent(300, 25, false, CefEventFlags.None);
browser.GetBrowser().GetHost().SendMouseClickEvent(300, 25, MouseButtonType.Left, false, 1, CefEventFlags.None);
browser.GetBrowser().GetHost().SendMouseClickEvent(300, 25, MouseButtonType.Left, true, 1, CefEventFlags.None);
例如;当我在ChromiumWebBrowser
中加载this游戏时,尽管在我们点击canvas
跳过介绍的前两个场景中效果很好,但这种方法在游戏中不起作用。
我很确定它仍然会单击那里,但我不知道这里发生了什么。
答案 0 :(得分:0)
模拟鼠标单击(并移动):
// get browser host
var wbHost = chromiumWebBrowser1.GetBrowser().GetHost();
// clicking cordinates
int xPosition = 100;
int yPosition = 300;
// send mouse move event
wbHost.SendMouseMoveEvent(xPosition, yPosition, false, CefEventFlags.None);
Thread.Sleep(50);
// send click
wbHost.SendMouseClickEvent(xPosition, yPosition, MouseButtonType.Left, false, 1, CefEventFlags.None);
Thread.Sleep(50);
wbHost.SendMouseClickEvent(xPosition, yPosition, MouseButtonType.Left, true, 1, CefEventFlags.None);
1-有时(尤其是在具有反爬虫环境的情况下),还必须模仿鼠标的移动。我使用第一行中显示的方法SendMouseMoveEvent
进行了操作。
2-单击发生在指定的x
和y
坐标处,但是要知道该坐标相对于浏览器组件窗口(视口)是非常重要的。因此,如果您的网络浏览器组件仅高100px
,并且您以y
的坐标向150px
发送了点击命令,则点击会但在网络浏览器之外发生,因此,不在网页中。
3-一种技巧,看一下点击是否确实在执行,以及确切地在哪里将其从MouseButtonType.Left
更改为MouseButtonType.Right
。这样做,如果网页上没有任何限制,您将能够看到“鼠标右键菜单”。如果您是在外部单击,则很有可能在操作系统上看到一个“鼠标右键菜单”(在Windows上,我可以看到我正在用此技巧在组件外部单击)。
4-另外,使用Thread.Sleep(50);
的延迟使组件有时间执行正确的事件。