CefSharp如何获取网页加载的资源

我看到similar questions发布了,没有答案.我是使用CefSharp的新手,但我需要知道是否可以获取网页加载的所有资源,例如图像,字体等.

官方文档对于如何实现这一目标似乎有些晦涩.

更清楚地说,场景非常简单.当您使用CefSharp加载网页时,该网页包含图像,JavaScript文件,字体文件等资源.我只需要获取所有这些资源即可进行探索.

在此先感谢您的帮助,对不起我的英语.

解决方法:

您不清楚要使用资源做什么.

您是否只需要资源清单?还是您想要资源的内容?

无论哪种方式,实现IRequestHandler都是要走的路.

        _myChromiumBrowser = new CefSharp.WinForms.ChromiumWebBrowser("http://somedomain.com")
        {
            RequestHandler = new MyRequestHandler()
        };


public class MyRequestHandler : IRequestHandler
{

    public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
    {
        return false;
    }

    public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
    {
                    // You can check the Request object for the URL Here
        return false;
    }

    public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    {
                    // You can also check the URL here
        callback.Dispose();
        return CefReturnValue.Continue;
    }

    public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
    {
        callback.Dispose();
        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)
    {
        callback.Dispose();
        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, ref string newUrl)
    {
    }

    public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    {
        return false;
    }


    public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    {
        return null;
    }


    public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
    {
    }

    public bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, System.Security.Cryptography.X509Certificates.X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
    {
        callback.Dispose();
        return false;
    }

…实际上,以上具有IRequest参数的任何函数都可用于检查URL. (以上内容基于CEFSharp的55版,因此您将需要根据要实现的版本来实现处理程序).上面也是一个空白模板,可以在您的项目中直接使用它,而CEFSharp / Chromium Web浏览器将返回适当的内容.

显然,您可以在CEFSharp源代码中找到一些源代码以获取适当的内容,但我并没有对其进行深入研究(因为我不需要达到目的).如果获取的是您想要的内容,则可能会发现,通过引发适当的HttpRequests并使用标准方法读取响应,可以更轻松地自己获取内容.

https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx

上一篇:用cefsharp写了一个保存网页为单文件html的小工具


下一篇:CefSharp浏览器视频无法播放