C#的webBrowser嵌入Grafana数据可视化网页

前言

之前利用Android的网页控件尝试将自己服务器的Grafana数据可视化网页,摸索着实现了自动填写表单,但是仅仅是自动填写,并无法提交,因为不同于网上99%教程里的填完直接就可以调用提交按钮的提交了,你会发现它会是灰色的不可用状态,查了N多Android资料无果.然后我看到C#这个控件,于是又想把玩一番,结果在一骗涉及C#的文章中偶然看到了其中的机理,解决了这个让我耿耿于怀的问题.

使用

关于webBrowse的使用不算困难,复杂在于与JS的交互,这个我就先不谈论,虽然我遇到的这个问题曾让我调试了一天网页的JS代码,也还是找不到关键检测代码在哪.
就Grafana网页应用到的技术和这一类 情况的解决办法记录一下.
我看到的一篇文章介绍webBrowse时提及网页可能会检测按键输入来判断是否输入或者判断是否是真人输入.于是呢应运而生的破解之道便是使用系统API发送键值,让网页的JS代码认为键盘输入.

代码

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        { 
            var submit =webBrowser1.Document.GetElementsByTagName("button")[0];
            SendKeys.Send("{TAB}");
            SendKeys.Send("viewer");
            SendKeys.Send("{TAB}");
            SendKeys.Send("viewer");
            Delay(20);
            submit.InvokeMember("click");
        }
        private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
        {
            DateTime current = DateTime.Now;
            while (current.AddMilliseconds(Millisecond) > DateTime.Now)
            {
                Application.DoEvents();//转让控制权            
            }
            return;
        }

这份解决代码是经过自己对网页研究简化的,初始方案改变自普通网页自动填表登陆方案,通过查找得到元素,然后对元素处理,只是这里不用给表单元素赋值,而是让元素获得焦点,然而这个方案还是被验证不可行,因为我调用Focus无法改变焦点,先调用前一元素失去焦点再本元素获得焦点也无果,然后机智的现学现卖,想到{TAB}键可以转移焦点,果不其然,于是测试出了这个方案,还有就是往往这种检测输入的还需要有个延迟提交机制,需要来个几十毫秒的等待才能提交.

效果展示

你可能感兴趣的:(物联网,C#)