SendMouseClickEvent有时不起作用

时间:2019-09-17 08:35:39

标签: javascript c# cefsharp pixi.js

我正在尝试使用HTML5canvas 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跳过介绍的前两个场景中效果很好,但这种方法在游戏中不起作用。 我很确定它仍然会单击那里,但我不知道这里发生了什么。

1 个答案:

答案 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-单击发生在指定的xy坐标处,但是要知道该坐标相对于浏览器组件窗口(视口)是非常重要的。因此,如果您的网络浏览器组件仅高100px,并且您以y的坐标向150px发送了点击命令,则点击会但在网络浏览器之外发生,因此,不在网页中。

3-一种技巧,看一下点击是否确实在执行,以及确切地在哪里将其从MouseButtonType.Left更改为MouseButtonType.Right。这样做,如果网页上没有任何限制,您将能够看到“鼠标右键菜单”。如果您是在外部单击,则很有可能在操作系统上看到一个“鼠标右键菜单”(在Windows上,我可以看到我正在用此技巧在组件外部单击)

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