CEF Simulate Mousedown and Keysend
本文关键字:Keysend and Mousedown Simulate CEF | 更新日期: 2023-09-27 18:00:31
我想使用CEF来控制Flash应用程序,所以我需要在没有JavaScript的情况下模拟MouseDown和KeySend。我正在使用屏幕外渲染。这就是我尝试的:
managedCefBrowserAdapter.OnMouseButton(
500, 500, 0, true, 2, CefEventFlags.LeftMouseButton);
或
MouseEvent a = new MouseEvent();
a.Modifiers = CefEventFlags.LeftMouseButton;
a.X = 500;
a.Y = 500;
或
managedCefBrowserAdapter.SendKeyEvent(0, 0, 0);
但什么都不管用。
这段代码对我有效。点击一次位置0,0(左上角)
browser.GetBrowser().GetHost().SendMouseClickEvent(0, 0, MouseButtonType.Left, false, 1, CefEventFlags.None);
System.Threading.Thread.Sleep(100);
browser.GetBrowser().GetHost().SendMouseClickEvent(0, 0, MouseButtonType.Left, true, 1, CefEventFlags.None);
上面的答案还可以。我只是想添加一些我认为非常重要的信息。。。
模拟鼠标点击(并移动):
// 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
坐标处,但要知道该坐标是相对于浏览器组件窗口(视口)的,这一点非常重要。因此,如果您的web浏览器组件只有100px
高,并且您将单击命令发送到y
坐标为150px
,则单击将发生,但在web浏览器外部,因此不在网页中。
3-查看点击是否真的在执行,以及具体在哪里执行的一个技巧是将其从MouseButtonType.Left
更改为MouseButtonType.Right
。这样做,如果网页上没有限制,你将能够看到";鼠标右键菜单";。如果你在外面点击,你很可能会看到一个";鼠标右键菜单";在操作系统上(这里是Windows,我可以看到我用这个技巧在组件外部点击)。
4-CCD_ 11上的CCD_ 9和CCD_;鼠标按钮向下点击";事件和";鼠标按钮向上点击";事件。
5-要获得对象在DOM上的位置,可以在这里使用我的答案:
CefSharp网页元素点击
6-因此,如果你的组件中加载了一个非常高的页面,并且你需要点击组件边界之外的按钮,你需要滚动网页。你可以用下面的代码来做:
模拟鼠标滚动(鼠标滚轮事件):
// send scroll command
// (mouse position X, mouse position Y, how much to scroll X, how much to scroll Y, events)
chromiumWebBrowser1.GetBrowser().GetHost().SendMouseWheelEvent(10, 10, 0, -100, CefEventFlags.None);
Thread.Sleep(300);
参数中最大的部分是不言自明的,但这里最重要的部分是第三和第四参数,它们分别是";滚动多少X";以及";滚动多少Y";。要向下滚动,只需使用负值;要向上滚动,则使用正值。在上面的代码中,它在水平方向(x
轴)不滚动任何内容(零像素),在垂直方向(y
轴)向下滚动100px。
您可以在loop
中使用此代码来滚动您需要的数量。我将它与JavaScript代码结合使用,以检索按钮的位置,检测它是否在视口上,或者是否需要再次发送滚动事件。