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

C# 如何使用CefSharp获取网页加载的资源,c#,cefsharp,C#,Cefsharp,我看到有人发了帖子,没有回复。我是新使用CefSharp的人,但我需要知道我是否可以获得网页加载的所有资源,例如图像、字体等 关于如何实现这一点,官方文件似乎有点模糊 更清楚地说,情况相当简单。当你用CefSharp加载一个网页时,这个网页包含图像、javascript文件、字体文件等资源。我只需要抓取所有这些资源来浏览它们 提前感谢您的帮助,并为我的英语感到抱歉。您可以使用jquery,按$(“img”)类型加载元素。每个(函数(){//do something}) 你还不完全清楚你想用这些资

我看到有人发了帖子,没有回复。我是新使用CefSharp的人,但我需要知道我是否可以获得网页加载的所有资源,例如图像、字体等

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

更清楚地说,情况相当简单。当你用CefSharp加载一个网页时,这个网页包含图像、javascript文件、字体文件等资源。我只需要抓取所有这些资源来浏览它们


提前感谢您的帮助,并为我的英语感到抱歉。

您可以使用jquery,按$(“img”)类型加载元素。每个(函数(){//do something})

你还不完全清楚你想用这些资源做什么

您只需要资源列表吗?或者您想要资源的内容

无论哪种方式,实现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并使用标准方法阅读响应,自己获取内容会更容易


但滚动无限的网页可能会出现问题。我认为CefSharp提供了
CefSharp.IRequestHandler
来满足我的需求,但我不确定。无论如何,谢谢。更清楚地说,我想要的是资源列表,而不是它们的数据。是的,我错了。我需要一个资源列表(资源URL),而不是资源数据。现在我的问题是如何在文本框中显示我可以在资源加载之前进入的URL。遗憾的是,我对C#没有足够的经验。无论如何,感谢您的解决方案,这是正确的方法。在我需要交互的地方,比如说,使用拥有的表单,我创建了一个公共委托,并在创建处理程序的过程中分配它。感谢VorTechS,我自己试着读了一些关于委托和事件的内容,但遗憾的是没有找到解决方案。我一直在尝试.public类MyRequestHandler:IRequestHandler{public delegate void ResourceAdded(字符串Url);public ResourceAdded OnResourceAdded{get;set;}public CefReturnValue OnBeforeResourceLoad(IWebBrowser浏览器控件、IBrowser浏览器、IFrame框架、IRequest、IRequestCallback回调){callback.Dispose();if(OnResourceAdded!=null){OnResourceAdded(request.Url);}返回CefReturnValue.Continue;}}所有这些没有实现的方法返回的
false
是什么?不清楚这是什么意思-你知道吗?