解决C# webBrowser 操作多级联动Select下拉框

最近在做一个类似于注册机的网页模拟操作,用的是winform窗体应用程序中的webBrowser实现的。但是在实际开发过程中遇到了一个多级select联动的问题,只有当选中了第一个select时,第二个select选择框中才会有数据可以选中。我在百度/谷歌/必应上均进行了搜索,结果一个能用的解决方案都没有,最后我用了另一种思路解决了问题。

问题截图:

问题描述:

只有选择了广东省才会加载下面的城市,而webBrowser操作html中的select并不能触发select的onchange事件,所以第二个或者第三个select中并不会有选择项出现

解决方法:

        private void button6_Click(object sender, EventArgs e)
        {
            webBrowser1.Stop();

            //找到select并选中
            webBrowser1.Document.GetElementById("regulations-select").SetAttribute("selectedIndex", "1");
            //创建一个script脚本
            HtmlElement script1 = webBrowser1.Document.CreateElement("script");
            script1.SetAttribute("type", "text/javascript");
            script1.SetAttribute("text", "function _func(){$('#regulations-select').trigger('change')}");
            //将脚本加入到body中并执行
            webBrowser1.Document.Body.AppendChild(script1);
            webBrowser1.Document.InvokeScript("_func");

            //延迟1500毫秒
            Delay(1500);

            //找到第二个select并选中
            webBrowser1.Document.GetElementById("checkout-regulations-select").SetAttribute("selectedIndex", "1");
            //创建一个script脚本
            HtmlElement script2 = webBrowser1.Document.CreateElement("script");
            script2.SetAttribute("type", "text/javascript");
            script2.SetAttribute("text", "function _func(){$('#checkout-regulations-select').trigger('change')}");
            //将脚本加入到body中并执行
            webBrowser1.Document.Body.AppendChild(script2);
            webBrowser1.Document.InvokeScript("_func");
        }

解决思路:

先在webBrowser1中找到第一个select,操作并选中,然后创建一个script脚本,插入js执行一下第一个select的 change 事件,这样第二个下拉框就会有值了,然后再操作第二个select,这样第三个select就有值了,这样不论有多少个select都可以实现多级联动。

THE END