想要在C#使用中webview2,最好使用VS2019及以上版本,最低支持.net 4.5版本,所以在win7系统上就可以进行开发了
ReoGrid是一个类Excel的控件,非常好用,两者搭在一起,可以实现一些自动化的输入工作,非常的方便,Excel的内容可以直接粘贴到这个控件里面
下面说说使用过程中遇到的问题:
1、安装webview2后,在vs工具箱中找不到webview2
这个有可能是安装的版本太高不显示,也有可能是电脑性能慢还没有在工具箱中显示出来,我试着换了一个低一些的版本,然后过了好一会,才在工具箱中搜索到
2、运行时webview2不显示网页内容
这是因为没有安装webview2的运行时,可以在nuget中搜索直接安装,感觉那个有100M+,安装好以后就可以正常显示网页了,win7、win10都需要安装运行时,只有win11是系统自带的
3、C#中通过代码操作网页,给网页中的表单赋值
这个是通过document.querySelector来定位网页中的元素的,对于网页中的元素,不要想的那么复杂, 其实就是赋值和点击鼠标,如果不想思考就直接使用js路径,如下图
如果你觉得这个太长写起来不方便,那么可以使用name、class等方式来查找,具体搜一下就知道了,下面一个是使用的name查找,一个是直接复制的js路径
web_view.ExecuteScriptAsync($"document.querySelector('[name=phone]').dispatchEvent(new Event('input'))"); web_view.ExecuteScriptAsync($"document.querySelector('#app > div > div.bgbox > div > div.van-row > div > div:nth-child(1) > form > div:nth-child(4) > div > div > div > div > div > div').click()");
4、给网页中的input文本框赋值后,点击进去时值却消失的问题,也就是说你看到文本框中有值,但网页认为没有,也无法通过前端的js检查
这个问题困惑了我半下午时间,后来在网上找到了解决的办法,就是给它手动增加一个事件就可以了,如下
web_view.ExecuteScriptAsync($"document.querySelector('[name=name]').value='" + name + "';"); web_view.ExecuteScriptAsync($"document.querySelector('[name=name]').dispatchEvent(new Event('input'))"); //可防止点击编辑后空值
5、对于使用div来实现复选框怎么选中的问题
有些网页上给div使用了role属性,设置为radio,它就表现为一个复选框,刚开始以为只要把checked设置为true就能让它选中了,试了好几次都发现无法选中,后来发现是思路有问题,设置它属性干啥呀,直接模拟鼠标点一下不就行了吗,好在有个唯一的name值,直接通过查找name后进行点击
web_view.ExecuteScriptAsync($"document.querySelector('[name=seriesName]').click()"); System.Threading.Thread.Sleep(1000);
6、对于下拉列表框的选择
下拉列表框中的选项其他都一样,只有内容不一样,这种的怎么选择它了,当然还是点击了,只是你要知道点击第几个选项,通过复制js路径来查找元素,在c#代码中判断好需要点击第几个选项,然后让它点去,中间休眠上不到1秒,好让网页有个反应的时间,不然选项没弹出来,你点了也没用,选中后再点击确认按钮。
web_view.ExecuteScriptAsync($"document.querySelector('#app > div > div:nth-child(2) > div.van-popup.van-popup--bottom > div > div.van-picker__columns > div.van-picker-column > ul > li:nth-child("+carnum+")').click();"); System.Threading.Thread.Sleep(600); web_view.ExecuteScriptAsync($"document.querySelector('[class=van-picker__confirm]').click()");
7、关于ReoGrid的一些操作
var sheet = Reo_excel.CurrentWorksheet; sheet.Resize(200, 3); //设置表格的行数和列数,默认是200行 sheet.SetColumnsWidth(0, 1, 80); //设置列的宽度 sheet.SetColumnsWidth(1, 2, 100); sheet.SetColumnsWidth(2, 3, 160); sheet[0, 0] = "姓名"; //设置第一行中的内容 sheet[0, 1] = "手机号码"; sheet[0, 2] = "车型";
//读取reogrid中的内容,如果读到空的单元格会异常,我这里是读到空时就认为是最后一条记录了,可以自己根据实际需求处理
var sheet = Reo_excel.CurrentWorksheet;
num += 1; if (sheet[num, 0] is null) { MessageBox.Show("已经是最后一行了!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } name = sheet[num, 0].ToString();
标签:sheet,name,C#,webview2,摸拟,querySelector,网页,div,document From: https://www.cnblogs.com/wjbych/p/17465367.html