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

Zeo*_*kat 3 c# cefsharp

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

关于如何实现这一点,官方文档似乎有点模糊.

更清楚的是,场景非常简单.当您使用CefSharp加载网页时,此网页包含图像,javascript文件,字体文件等资源.我只需要抓住所有这些资源来探索它们.

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

Vor*_*chS 6

您并不完全清楚自己想要对资源做什么.

你只想要资源清单吗?或者你想要资源的内容?

无论哪种方式,实现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;
    }
Run Code Online (Sandbox Code Playgroud)

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

显然,您可以找到一些源代码来获取CEFSharp源代码中的相应内容,我没有深入研究它(因为我不需要为了我的目的).您可能会发现,如果获取内容是您所追求的内容,则可以通过提升相应的HttpRequests并使用标准方法读取响应来自行获取内容.

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