Получить ответ от сайта c помощью Cefsharp

138
16 мая 2019, 13:20

Добавил стандартное окно браузера от Cefsharp, пытаюсь авторизоваться на сайте и получить ответ при помощи IRequestHandler, но в итоге из за OnBeforeResourceLoad страница перезагружается и ожидает заново авторизации.

Без использования IRequestHandler авторизация проходит успешно. Подскажите пожалуйста как мне настроить возвращение данных с авторизацией что бы дальше работать с ними?

public void InitializeChromiuim()
    {
        if (chromiumBrowser == null)
        {
            chromiumBrowser = new ChromiumWebBrowser("https://site.com/ru")
            {
                Dock = DockStyle.Fill,
            };
            chromiumBrowser.FrameLoadEnd += OnIsBrowserInitializedChanged;
            Controls.Clear();
            Controls.Add(chromiumBrowser);
            var requestHandler = new MyRequestHandler();
            chromiumBrowser.RequestHandler = requestHandler;
        }
    }
    public class MyRequestHandler : IRequestHandler
    {
        public bool CanGetCookies(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
        {
            return false;
        }
        public bool CanSetCookie(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, Cookie cookie)
        {
            return false;
        }
        public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
        {
            return false;
        }
        public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
        {
            return null;
        }
        public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
        {
            var model = request;
            return false;
        }
        public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            return CefReturnValue.Continue;
        }
        public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
        {
            return false;
        }
        public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
        {
            return false;
        }
        public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
        {
        }
        public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
        {
            return false;
        }
        public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
        {
            return false;
        }
        public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
        {
        }
        public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
        {
        }
        public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
        {
            // You can also check the request URL here
        }
        public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
        {
        }
        public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
        {
            return false;
        }
        public bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, System.Security.Cryptography.X509Certificates.X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
        {
            return false;
        }
    }
    /// <summary>
    /// Выполняемые действия при полной загрузке страницы
    /// </summary>
    private void OnIsBrowserInitializedChanged(object sender, FrameLoadEndEventArgs args)
    {
        ChromiumWebBrowser browser = sender as ChromiumWebBrowser;
        if (args.Url == "https://site.com/ru")
            chromiumBrowser.ExecuteScriptAsync("document.querySelector('.btn-link').click();");
    }
READ ALSO
C# WPF Как создать свой User Control со списком внутри?

C# WPF Как создать свой User Control со списком внутри?

Хочу сделать TreeView но в таком виде и с нуля

157
Экранирование и регулярные выражения. PHP

Экранирование и регулярные выражения. PHP

Задание: Если переменная $text не содержит специальных символов - вывести соответствующее сообщениеНикак не получается заставить программу...

130
Как сделать зависимость от страны?

Как сделать зависимость от страны?

как сделать логику, выбираешь страну(таксономия = lftcat) и после него выводятся записи этой таксономии в другом селекте

121