C#使用webview2摸拟网页提交的一些记录

想要在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();

 

posted @ 2023-06-08 09:57  wjbych  阅读(3960)  评论(0编辑  收藏  举报