webBrowser实现自动填写登录并在跳转页面实现签到

        实验室要每天签到,所以用webBrowser写了一个一键签到的小程序,期间遇到些很有价值的问题,最大的收获就是对navigated事件 和  DocumentCompleted事件的了解。

  private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;
            if (flag == true)
            {
                //HtmlElementCollection 是一个集合类型,Submit中保存了表单中所有元素
                HtmlElementCollection Submit = webBrowser1.Document.All;
                HtmlElement tbUserid = webBrowser1.Document.All["username"];
                HtmlElement tbPasswd = webBrowser1.Document.All["password"];
                if (tbUserid == null || tbPasswd == null)
                    return;
                tbUserid.SetAttribute("value", "Dp");
                tbPasswd.SetAttribute("value", "123456");
                getSubmit(Submit);
            }
            else
            {
                HtmlElement signIn = webBrowser1.Document.GetElementById("signin");
                if (signIn == null)
                    return;
                signIn.InvokeMember("click");
            }  
        } 
        //按元素类型获取,invokeMember方法模拟点击,GetAttribut方法检索已命名属性的值
        private void  getSubmit(HtmlElementCollection Submit)
        {
            foreach (HtmlElement e in Submit)
            {
                string str = e.GetAttribute("type");
                if (str == "submit")
                {
                    e.InvokeMember("click");
                }
            }
        }
        首先是Documentscompleted事件的代码,其中flag用来指定一级或二级页面,因为只有两个,bool型完全足够了,flag为true时检索登录页面,获取登录id、密码,登录button等元素,并自动填充表单。 

       对于表单元素中有id属性的,可以用document.All["value"] 或 document.GetElementById("value") 获取相应元素,要注意的是用这两种方法必须对检索结果是否为空进行判断,不然会报错。

       而没有id属性的只用靠遍历所有元素获得,这里用的是“type”类型,一定要注意,选取检索的类型命名一定要是唯一的,不然会返回所有匹配项。

       获得元素后,用SetAttribute()方法填写表单,用InvokeMember()方法模拟点击,实现自动填写表单并提交的功能。

   

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            //label1.Text = webBrowser1.Document.Url.ToString();
            flag = !flag;
        }
        接下来是Navigated事件,虽然很简单,却是关键所在,因为如果不对navigate事件进行处理,webBrowser.url会一直是一级页面,这样也就不能获取到跳转后页面的元素。

        MSDN上对navigate的定义: 处理 Navigated 事件,在 WebBrowser 控件导航到新文档时接收通知。如果 Navigated 事件发生,则新文档已开始加载,这意味着可以通过 DocumentDocumentText 和DocumentStream 属性访问所加载的文档。处理 DocumentCompleted 事件,在 WebBrowser 控件完成加载新文档时接收通知。

            整个流程就是Navigated --> DocumentCompleted  -->  Navigated --> DocumentCompleted,也就是每次跳转后都会重新调用DocumentCompleted事件对网页进行处理,所以所有操作都该放在DocumentCompleted中,放在Navigated中的话不能获取所有元素,只是body之前的。

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值