gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:19:09 35 4
gpt4 key购买 nike

我看到了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 网络浏览器返回适当的内容。

显然,您可以在 CEFSharp 源代码中找到一些源代码来获取适当的内容,我没有深入研究它(因为我不需要这样做)。如果您想要获取内容,您可能会发现通过引发适当的 HttpRequest 并使用标准方法读取响应来自己获取内容会更容易。

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

关于c# - 如何使用CefSharp获取网页加载的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519668/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com