Я пытаюсь программно нажать кнопку на веб-странице.По какой-то странной причине я не могу сделать это напрямую, выполняя 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
.Когда я запускаю свою программу, событие нажатия не запускается.Когда я вручную щелкаю в любом месте документа, я вижу сообщение «Нажал».Что я делаю не так?