首页 > 解决方案 > SendMouseClickEvent 有时不起作用

问题描述

我正在尝试在HTML5 canvasusing上模拟单击事件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,虽然它在我们点击跳过介绍的前两个场景中运行良好,但canvas这种方法在游戏中不起作用。我很确定它仍然会点击那里,但我不知道这里发生了什么。

标签: javascriptc#cefsharppixi.js

解决方案


模拟鼠标点击(和移动):

// 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 - 单击发生在指定的坐标xy坐标处,但非常重要的是要知道该坐标是相对于浏览器组件窗口(视口)的。因此,如果您的 Web 浏览器组件只是100px很高,并且您发送一个单击命令来y协调150px单击将发生但在 Web 浏览器之外,因此不在网页中。

3 - 查看点击是否真的被执行以及具体在哪里执行的一个技巧是将其从 更改MouseButtonType.LeftMouseButtonType.Right. 这样做,如果网页没有限制,你就能看到“鼠标右键菜单”。如果您在外部单击,您可能会在操作系统上看到“鼠标右键菜单” (此处为 Windows,我可以看到我使用此技巧在组件外部单击)

4 - 此外,使用的延迟Thread.Sleep(50);使组件有时间正确执行事件。


推荐阅读