关于c#:使用CefSharp浏览器SendKeys发出的问题

Issue With CefSharp Browser SendKeys

我正在使用Chrome浏览器自动执行某些任务。

基本上,我想为此加载图像,我必须单击网页上的"添加图像"锚标记。

因此我无法直接单击它,不确定为什么其他代码可以使用相同的代码。但是我设法将重点放在该锚标记上,但是发送:

1
2
3
4
 KeyEvent k = new KeyEvent();
 k.WindowsKeyCode = 9;  // TAB KEY
 browser.GetBrowser().GetHost().SendKeyEvent(k);
 //browser = ChromiumWebBrowser browser;

当我看到它到达正确的锚标记时,上面的工作就很好了。

现在我要做:

1
2
3
 KeyEvent k = new KeyEvent();
 k.WindowsKeyCode = 13;   //ENTER KEY
 browser.GetBrowser().GetHost().SendKeyEvent(k);

要模拟Enter键,但是什么也没有发生,但是如果我在Keyword上手动按" Enter"键,它将正常工作,因此,为什么上述内容与我单击" Enter Key"时的行为不一样

任何建议。


我这样使用了您的代码,并且对我有用。

1
2
3
4
5
6
KeyEvent k = new KeyEvent();
k.WindowsKeyCode = 0x0D;
k.FocusOnEditableField = true;
k.IsSystemKey = false;
k.Type = KeyEventType.Char;
Browser.GetBrowser().GetHost().SendKeyEvent(k);


花了这么多时间,但发现公认的答案有助于深入了解这一问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
KeyEvent k = new KeyEvent
{
    WindowsKeyCode = 0x0D, // Enter
    FocusOnEditableField = true,
    IsSystemKey = false,
    Type = KeyEventType.KeyDown
};

_browser.GetBrowser().GetHost().SendKeyEvent(k);

Thread.Sleep(100);

k = new KeyEvent
{
    WindowsKeyCode = 0x0D, // Enter
    FocusOnEditableField = true,
    IsSystemKey = false,
    Type = KeyEventType.KeyUp
};

_browser.GetBrowser().GetHost().SendKeyEvent(k);

Thread.Sleep(100);

请注意先发送KeyEventType.KeyDown,然后发送KeyEventType.KeyUp

受CEF启发,模拟Mousedown和Keysend,并单击CefSharp网页元素。