сегодня я работаю с Chromium Embedded Framework 3.
У меня все настроено, скомпилировано и выполнено. Все отлично работает
Теперь я хочу прочитать исходный код страницы после того, как все отрендерено и JavaScript выполнен.
Также хотелось бы получить буфер от закадрового рендеринга.
Моя основная структура приложения:
Приложение реализует CefApp, CefBrowserProcessHandler и CefRenderProcessHandler
Обработчик реализует CefClient, CefDisplayHandler, CefLifeSpanHandler, CefLoadHandler и CefRenderHandler
Посетитель реализует CefStringVisitor
В приложении :: OnContextInitialized () я выполняю
CreateBrowser (window_info, handler.get (), «http://www.google.com/»,
browser_settings, NULL);
в то время как
window_info.SetAsWindowless (NULL, true);
Теперь App :: OnContextCreated () вызывается, только если я запускаю CEF3 в одном режиме с
main_settings.single_process = true;
в противном случае это никогда не называется. В приложении :: OnContextCreated () я делаю
browser-> GetMainFrame () -> GetSource (new Visitor ());
чтобы получить исходный код страницы, и он работает, но метод вызывается несколько раз и, кажется, не выполняет JavaScript на данном этапе.
Теперь мой вопрос: что лучше всего читать на странице источника ПОСЛЕ того, как все отображается и выполняется JavaScript?
Также Handler :: OnPaint () никогда не вызывается, в то время как Handler :: GetViewRect ().
С уважением
Norwido
OnContextCreated работает в процессе Renderer, поэтому, вероятно, он работает только в режиме одного процесса. Вы должны вызвать GetSource в CefLoadHandler :: OnLoadEnd или OnLoadingStateChange, которые выполняются в процессе браузера.
Нереализация всех необходимых обратных вызовов в CefRenderHandler может быть причиной того, что обратный вызов OnPaint не вызывается. Прочитайте комментарии к документу в заголовочных файлах.