此案例是《.Net WebView2 项目,实现 嵌入 WEB 页面 Chromium内核》文的续集。

主要是针对WebView2的一些微软自己封装的不熟悉的API,有一些人已经对 PuppeteerSharp很熟悉了,那么,直接用 PuppeteerSharp的话,那就降低了学习成本,那还是很有必须要的。

之前自己也RPA获取过联盟的高 清 原画,现在就获取下王者的高 清 壁纸。

王者壁纸自动化获取逻辑分析

其实它的逻辑很简单, 就是官网,打开后,在右下角就看到了皮肤页面部分。

这个时候,点击更多,就会打开全部英雄详情的页面。

这个时候,单点任意一个英雄,就会新开一个页面,这个英雄自己的页面,可以看到具体的皮肤信息了。

这里可以看到有6个皮肤,那么,到这里我就可以获取这6个皮肤作为高清王者的皮肤了。

那么,让程序自动化操作,并把这些信息处理保存好,就是我们要做到的事情。

新建一个WPF项目

新建一个 WPF 项目,要添加 Nuget 包

Install-Package Microsoft.Web.WebView2 -Version 1.0.1293.44
Install-Package PuppeteerSharp -Version 7.1.0
Install-Package HtmlAgilityPack -Version 1.11.43

MainWindow.xaml

界面大致样子和布局

<DockPanel><StackPanel DockPanel.Dock="Top" Orientation="Horizontal" HorizontalAlignment="Right"><Label Name = "loginfo" Content="未采集"/><Button Name="start" DockPanel.Dock="Right" Width="150" Content="开始采集" Click="start_Click"/></StackPanel><wpf:WebView2 Name = "webView2"/>
</DockPanel>

右上角一个提示信息,一个采集的按钮,布局很是简单

如何启用 PuppeteerSharp

其实都是基于谷歌的DevTools协议来的,所以,只要WebView2开启了Debugging端口即可。

var result = await CoreWebView2Environment.CreateAsync(null, System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cache"),new CoreWebView2EnvironmentOptions($"--remote-debugging-port={Port}"));
await webView2.EnsureCoreWebView2Async(result);

通过WebVeiw2的游览器启动参数 : --remote-debugging-port=6666 来开启DevTools协议的支持。

PuppeteerSharpHelper

public class PuppeteerSharpHelper
{/// <summary>/// 获取游览器对象/// </summary>public static Task<Browser> GetBrowser(int port, int height, int width){return Puppeteer.ConnectAsync(new ConnectOptions { DefaultViewport = new ViewPortOptions() { Height = height, Width = width }, BrowserWSEndpoint = WSEndpointResponse.GetWebSocketDebuggerUrl(port) });}internal class WSEndpointResponse{public string WebSocketDebuggerUrl { get; set; }public static string GetWebSocketDebuggerUrl(int port){string data;using (var client = new HttpClient()){data = client.GetStringAsync($"http://127.0.0.1:{port}/json/version").Result;}return JsonConvert.DeserializeObject<WSEndpointResponse>(data).WebSocketDebuggerUrl;}}
}

所用到的王者实体信息

public class HeroInfo
{public string Name { get; set; }public string Url { get; set; }public string TargetUrl(){return $"https://pvp.qq.com/web201605/{Url}";}public List<HeroSkin> HeroSkins { get; set; }
}
public class HeroSkin
{public HeroSkin(string name, string url){this.Name = name;this.Url = "https:" + url;}public string Name { get; set; }public string Url { get; set; }
}

RPA的核心代码

private async void start_Click(object sender, RoutedEventArgs e)
{var herolistPath = await Currentpage.EvaluateExpressionAsync<string>("document.querySelector('body > div.wrapper > div.main > div:nth-child(3) > div.skin_center.fl > div.item_header > a').href");await Currentpage.GoToAsync(herolistPath, WaitUntilNavigation.DOMContentLoaded);loginfo.Content = "开始获取内容";var herolist = await Currentpage.EvaluateExpressionAsync<string>("document.querySelector('body > div.wrapper > div > div > div.herolist-box > div.herolist-content > ul').innerHTML");var heros = GetHeroInfos(herolist);loginfo.Content = $"获取全部英雄信息共:{heros.Count}条";foreach (var item in heros){await Currentpage.GoToAsync(item.TargetUrl(), WaitUntilNavigation.DOMContentLoaded);Thread.Sleep(100);var skins = await Currentpage.EvaluateExpressionAsync<string>("document.querySelector('body > div.wrapper > div.zk-con1.zk-con > div > div > div.pic-pf > ul').innerHTML");item.HeroSkins = GetHeroSkins(skins);}loginfo.Content = "开始下载资源";var count = 0;//开始执行下载foreach (var item in heros){count++;loginfo.Content = $"资源一共:{heros.Count}条,正在下载第{count}条,还剩下:{heros.Count - count}";var HearoPath = System.IO.Path.Combine(ImagesPath, item.Name);if (!System.IO.Directory.Exists(HearoPath)){System.IO.Directory.CreateDirectory(HearoPath);}foreach (var skin in item.HeroSkins){await WebHelper.DownloadFile(skin.Url, System.IO.Path.Combine(HearoPath, $"{skin.Name}.jpg"));}}loginfo.Content = "获取完毕,等待查看!";
}

效果如下:

需要点击获取按钮,就会执行自动化获取操作,然后把获取的内容存储到当前项目bin目录images目录下。

下面就是下载完后的效果。


整整齐齐,很完整,都是我喜欢的英雄和买不起的皮肤。

而且,获取到的包含了皮肤的名称

总结

基于WebView2,技术又深一层次的展开,一个好的技术,必定用到合适的场景上才是最合适的。

代码地址

https://github.com/kesshei/WangZheRongYao.git

https://gitee.com/kesshei/WangZheRongYao.git

一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

版权

蓝创精英团队

WebView2 通过 PuppeteerSharp 实现RPA获取壁纸 (案例版)相关推荐

  1. 爬虫之Scrapy框架爬取彼岸壁纸案例分享

    爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...

  2. Weixin4j微信开发网页授权获取openid案例

    前言 weixin4j网页静默授权获取openid案例 **说明:**微信网页授权基础知识请参考官方文档. 静默授权获取OpenId 本 示例基于weixin4j开发,weixin4j是Java微信开 ...

  3. 【python】必应api获取壁纸信息+修改桌面+倒计时显示

    1.0版本 一.获取壁纸路径 使用request对必应壁纸的api进行访问,获取图片路径,并下载到本地,api地址的说明参考:starsion大佬的文章 顺便做了个封装,代码如下所示: 其中: 1.d ...

  4. 获取壁纸网站第一页至第n页的壁纸

    获取壁纸网站第一页至第n页的壁纸 壁纸网站是免费的 超多二刺螈小姐姐 以下记录我爬虫思路 0.先来一波成果 v 1.寻找网页规律 页数是通过URL中的page参数控制的 按F12查看网页元素 我们的目 ...

  5. Android 12新特性之获取壁纸主色调并设置系统主题色

    ​ 关注这个问题首先是因为我队友某天吐槽,说整些奇奇怪怪的东西不如整个什么手机自适应手机壳主题.当然这个东西不是那么好实现的,毕竟已经脱离了软件层面涉及到硬件层面了.但是,转念一想,是否可以弄一个自适 ...

  6. java一键换壁纸_Java 版下载必应每日壁纸并自动设置 Windows 系统桌面(改编自 C# 版)...

    哈哈,好久没有写博客了,已经荒废了,前几天在某 IT 网站看到一个用 C# 写的设置必应每日壁纸为 Windows 系统桌面,看了看源码是通过调用 User32.dll 进行设置的,刚刚最近做的项目更 ...

  7. .NET 5 自定义配置(动态配置,配置中心) 案例版

    .NET 5 自定义配置(动态配置,配置中心) 案例版 为啥要自定义配置 有些功能可能自己用着简单,不需要那么复杂.想着简单粗暴的解决问题,可控的实现代码控制,就可以用这样的方式实现. 另外,如果对配 ...

  8. 《互联网+:小米案例版》的读书笔记

    读书笔记 摘自<互联网+:小米案例版刘润> 互联网+:小米案例版刘润 序篇 创业方法论之变 雷军反复强调的"顺势而为",以及"站对了风口,猪都能飞起来&quo ...

  9. 人人都是产品经理,不可不知的产品淘宝事【案例版】

    马云针对"十月围城"事件说:一生中总有那么一些时刻,我们需要鼓起勇气去做选择.而这些选择不仅不符合常理,违背理性,甚至离经叛道得罪亲友.即便如此,我们可能还会一意孤行!因为我们相信 ...

最新文章

  1. electron ipcRenderer渲染进程发送事件, ipcMain主进程监听事件
  2. widcomm BT search place
  3. 解决github无法访问的问题
  4. Fraction Construction Problem(拓展欧几里德)
  5. 志高空调,到了最危险的时候!
  6. VS 2017 产品密钥
  7. 走遍中国《中国古镇全集》
  8. 深度学习:概述和一孔之见 浅谈深度学习中潜藏的稀疏表达
  9. linux内存测试工具memtest,Linux基础教程:内存测试工具(Memtest86+)
  10. PHP序列化与反序列化
  11. OSPF网络可以没有BDR(实验)
  12. 数学建模 MATLAB绘制心形线
  13. 《电路原理》清华公开课 week1 支路变量、元件、KCL、KVL
  14. win7无线网显示小太阳
  15. KCP 协议 YES
  16. python交换数组中的两个元素_Python 交换数组元素
  17. cesium 指南针、比例尺
  18. SpringBoot 整合mybatis、mybatis日志、并测试findAll查询数据库方法
  19. mysql server 安装及配置_mysql server的安装和配置
  20. 常用车载总线CAN、CAN FD、LIN、FlexRay、Ethernet介绍

热门文章

  1. matlab计算经验半方差(变异函数)
  2. 雪鹰领主服务器维护,37雪鹰领主12月20日维护更新公告
  3. [案例分析]一汽高工离职后揭示的中国汽车业绝对内幕!(转)
  4. 功能展示——Android底部导航栏复古风TabHost实现
  5. 静态代理和动态代理案例介绍
  6. Django 框架全面讲解
  7. Linux命令行实现回收站功能
  8. JSP页面tdl自定义标签的做法
  9. eclipse中添加sdk_在Eclipse中嵌入NASA World Wind Java SDK
  10. 211计算机考研院校排名6,计算机考研学校排名:比较稳的211有哪些?