我想使用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 :(得分:12)
此代码适用于我。点击位置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);
答案 1 :(得分:1)
以上答案正常。我只想添加一些我认为非常重要的信息...
模拟鼠标单击(并移动):
// 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-true
上的false
和SendMouseClickEvent
将分别发送“鼠标按下按钮”事件和“鼠标按下按钮向上”事件。
5-要在DOM上获取对象的位置,可以在此处使用我的答案中的方法:
CefSharp webpage element click
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代码结合使用,以检索按钮的位置,以检测按钮是否在视口中,或者是否需要再次发送滚动事件。