Как отправить события мыши в компоненте браузера Java-CEF? - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь программно нажать кнопку на веб-странице.По какой-то странной причине я не могу сделать это напрямую, выполняя JavaScript на моем экземпляре CefBrowser при загрузке страницы.Я попробовал тот же код JS в консоли Chrome Dev, и он делает щелчок без каких-либо хлопот.Из-за этого ограничения я планирую смоделировать событие click из Java-кода «родным» способом, чтобы я мог обойти любые ограничения безопасности браузера, если это то, что предотвращает щелчок в JS.

Мой вопрос таков:Как сделать это в режиме Window / non-osr?

Я вижу, что CefBrowser_N определяет методы, подобные sendMouseEvent, но я не могу эффективно использовать их.Вот что я пытаюсь.

Поскольку такие методы, как sendMouseEvent, являются protected, и мой код, который должен вызывать это, находится вне org.cef.browser, я изменил спецификатор на public.Опять же, поскольку в документации сказано, что мы не должны создавать экземпляры CefBrowser_N напрямую, а вместо этого выбрать использование CefBrowserFactory.create, я определяю метод CefBrowserFactory.createWrBrowser, который возвращает экземпляр CefBrowserWr, поскольку интерфейс CefBrowser не 't выставить sendMouseEvent.Новый метод реализован так:

public static CefBrowserWr createWrBrowser (
        CefClient client, String url, CefRequestContext context) {
    return new CefBrowserWr(client, url, context);
}

В отдельном классе, MyBrowserHandler, я создаю экземпляр CefBrowserWr, например:

CefClient client = MainFrame.getCefInstance().createClient();
CefBrowserWr browser = CefBrowserFactory.createWrBrowser(client, Properties.URL, null);
Component uiComponent = browser.getUIComponent();

Это может бытьИнтересно, что я передаю null для context.Не уверен, что это делает, но я сделал это так, как это делается в CefClient классе.Проверьте источник CefClient.createBrowser и сообщите, если я должен сделать это другим способом.Теперь, когда я могу использовать sendMouseEvent, я делаю это, когда страница (и элемент, по которому нужно щелкнуть) загружается:

 MouseEvent mouseEvent = new MouseEvent(
      browser.getUIComponent(),
      MouseEvent.MOUSE_CLICKED,
      System.currentTimeMillis() + 1000, // wait 1 second
      0,
      300, 60, // x, y co-ordinates
      1, false
);

browser.sendMouseEvent(mouseEvent);

Я не уверен, что координаты точны, ноВ любом случае, я слушаю doument.onclick в JavaScript и веду журнал "Нажал", когда * click происходит в document.Когда я запускаю свою программу, событие нажатия не запускается.Когда я вручную щелкаю в любом месте документа, я вижу сообщение «Нажал».Что я делаю не так?

...