在 WebView2 控件中,可以通过以下方式保存网页加载的资源列表(包括图片、脚本、CSS等):
使用 WebResourceRequested 事件
await webView.EnsureCoreWebView2Async(); // 订阅Web资源请求事件 webView.CoreWebView2.WebResourceRequested += (sender, args) => { string url = args.Request.Uri; string method = args.Request.Method; // 获取资源类型(通过Content-Type或文件扩展名) string resourceType = "Unknown"; if (args.Response != null) { string contentType = args.Response.Headers.GetHeader("Content-Type")?.ToLower(); if (contentType.Contains("text/css")) resourceType = "CSS"; else if (contentType.Contains("javascript")) resourceType = "JS"; else if (contentType.Contains("image/")) resourceType = "Image"; // 其他类型判断... } // 输出资源信息 Debug.WriteLine($"Resource: {url}, Type: {resourceType}, Method: {method}"); // 保存文件,文件名称需自行处理 string fileName = Guid.NewGuid().ToString(); File.WriteAllBytes($"{fileName}", SteamHelper.StreamToBytes(content)); };
SteamHelper代码
public class SteamHelper { /// <summary> /// 将 Stream 转成 byte[] /// </summary> public static byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begin); return bytes; } /// 将 byte[] 转成 Stream public static Stream BytesToStream(byte[] bytes) { Stream stream = new MemoryStream(bytes); return stream; } //四.Stream 和 文件之间的转换 /// <summary> /// 将 Stream 写入文件 /// </summary> /// <param name="stream"></param> /// <param name="fileName"></param> public static void StreamToFile(Stream stream, string fileName) { // 把 Stream 转换成 byte[] byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begin); // 把 byte[] 写入文件 FileStream fs = new FileStream(fileName, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(bytes); bw.Close(); fs.Close(); } /// <summary> /// 五.从文件读取 Stream /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static Stream FileToStream(string fileName) { // 打开文件 FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); // 读取文件的 byte[] byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); // 把 byte[] 转换成 Stream Stream stream = new MemoryStream(bytes); return stream; } }