Баг или фича CefSharp, получение HTML, ViewSource vs GetSourceAsync

Здравствуйте. Разбираюсь с cefsharp и наткнулся на какой то глюк.
Задача получить полный код страницы.
Нашел в интернете код:

    private async Task<string> GetHTMLFromWebBrowserAsync(ChromiumWebBrowser browser)
        {
            browser.GetBrowser().MainFrame.ViewSource();

            return await browser.GetBrowser().MainFrame.GetSourceAsync();
        }

Но тут есть ненужная вещь.

browser.GetBrowser().MainFrame.ViewSource();

Эта строка открывает блокнот и показывает в нем правильный код.
Если после нее выполнить

browser.GetBrowser().MainFrame.GetSourceAsync();

То все возвращается правильно. (По крайней мере глючит меньше)

Если же строку выполнять ТОЛЬКО

browser.GetBrowser().MainFrame.GetSourceAsync();

То код страницы возвращается только со скриптами. Он не выполняет прогрузку и выполнение всех скриптов на странице. Почему так то??

Почему так то?? Зачем нужно это окно блокнота то?? Каким образом получить правильный код без внешних окон блокнота??

Так и задумано.

cefsharp.github.io/api/57.0.0/html/M_CefSharp_WebBrowserExtensions_ViewSource.htm

Opens up a new program window (using the default text editor) where the source code of the currently displayed web page is shown.

Зачем вызывать если не нужно это?)

GetSourceAsync вроде ж и возвращает код.

Вообще по описанию и гуглу похоже, что это исходник от сервера, а не текущий DOM. Как Ctrl+U vs F12
Но если

то видимо все-таки нет, и может просто вызывать позже надо?

Например в FrameLoadEnd
https://stackoverflow.com/a/35925515/964478

Я тоже это видел и меня просто всбесила глупость.

Там тоже спрашивали как избавится от показа нового окна а в ответ код где то же самое окно показывается.
Тут глюк видимо в том что когда показывается окно то код прогружается в какой то внутренний буфер чтоли. Я тут исходники разобрал но там какая то каша. Так и не нашел этой функции. Кроме интерфейсов вообще ничего нету… (((

А, если нужно получить код после обработки скриптами, то конечно в момент завершения загрузки еще может быть рано.

В Selenium это легко решается функцией ожидания появления нужного элемента на странице.
В обычных браузерах типа этого обычно сложно :kolobokcrossing:
Можно тупо Sleep :soidet:

WebBrowserExtensions.cs :arrow_right: CefFrameWrapper.cpp :arrow_right: frame_impl.cc

Да что то не похоже. Где тот самый метод который получает код и вызывает что то типа Process.Start. где текстовый документ *.tmp сохраняется и как запускается.

Так это не ViewSource.
Он по аналогичному пути в итоге тут, потом тут, тут и наконец WriteTempFileAndView.

Но он не делает ничего особенного, просто задержка получается и скрипты успевают выполниться.

Переделал через событие FrameLoadEnd. Вроде заработало без показа блокнота. Будем ждать тестирования. Похоже это и есть правильное решение.