选项卡重新捕获

Tab to recaptcha

场景如下:

我正在通过 CefSharp 浏览器加载页面。当用户点击某个按钮(在表单上,​​而不是网页上)时,页面应该会聚焦于 recaptcha。

我试过使用 SendKeys 切换到验证码,但不是一次按下 Tab 键,它似乎注册了多次,最终集中在底部的 'Terms' link验证码右边而不是复选框。

我也试过使用 chromeBrowser.ExecuteScriptAsync() 方法在页面上 运行 javascript。我可以成功地关注文本框,甚至是来自这些文本框的 运行 按键事件,但是当我 运行 前面的文本框上的标签按键事件时,recaptcha 仍然没有突出显示。

chromeBrowser.Focus();
chromeBrowser.ExecuteScriptAsync("document.getElementsByClassName('txtBox')[0].Focus();" +
"document.getElementsByClassName('txtBox')[0].value = 'test string';")
SendKeys.Send("{TAB}");
SendKeys.Send("{ENTER}");

我还添加了一个事件侦听器,用于确认 Tab 确实在 'pressed'

chromeBrowser.Focus();
chromeBrowser.ExecuteScriptAsync("document.getElementsByClassName('txtBox')[0].addEventListener('keypress', function(){" +
"alert('something was pressed!');});" +
"document.getElementsByClassName('txtBox')[0].focus();" +
"document.getElementsByClassName('txtBox')[0].value = 'test value';" +
"var e = document.createEvent('KeyboardEvent');" +
"e.initKeyboardEvent('keypress', true, true, document.defaultView, 9, 0, '', false, '');" +
"document.getElementsByClassName('txtBox')[0].dispatchEvent(e);");

我已经为页面检查中 recapctha 上显示的每个类名尝试了 getElementsByClassName,然后将焦点设置到该类名。我已经在 recaptcha iFrame 的 ID 上尝试了 getElementById 并将焦点设置到它。没有关注验证码。

我没主意了。任何帮助将不胜感激。

我找到了一个完全避免 SendKeys 和 javascript 的解决方案。 CefSharp 浏览器能够模拟按键和鼠标点击。我最后只是选择了验证码之前的文本框,然后用 Tab 键切换到它。

chromeBrowser.Focus();
chromeBrowser.ExecuteScriptAsync("document.getElementsByClassName('txtBox')[0].focus();");

CefSharp.KeyEvent keyEvent = new CefSharp.KeyEvent();
keyEvent.WindowsKeyCode = (int)Keys.Tab;
chromeBrowser.GetBrowser().GetHost().SendKeyEvent(keyEvent);

我已经针对 Tab 键测试了 KeyDownKeyUp 并且它可以工作,但是要在输入元素中放置一个字符,我们需要改用 KeyEventType.Char。在这种情况下,甚至 Tab 键也充当文本选项卡而不用于更改焦点。

KeyEvent key = new KeyEvent
{
    WindowsKeyCode = 0x0D, // Enter you could use '(int)Keys.Enter'
    FocusOnEditableField = true,
    IsSystemKey = false,
    Type = KeyEventType.Char
};


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