C# WinForm Webbrowser 模拟登陆 打卡

根据需求,完成了自动登录打卡的功能,现分享主要代码。

有不足的地方请指教!

  • 读取配置文件,获取要登录考勤的帐户和密码,为了防止自己的用户名和密码是明文,做了加密解密处理。

            private void Form1_Load(object sender, EventArgs e)
            {
                _strFlag = ConfigurationManager.AppSettings[_strConfigPar1] as string;
                _strNetUserName = ConfigurationManager.AppSettings[_strConfigPar2] as string;
                _strNetPassword = ConfigurationManager.AppSettings[_strConfigPar3] as string;
    
                if (_strNetUserName != null && _strNetPassword != null)
                {
                    doDecrypt(_strNetUserName, _strNetPassword);
                    webBrowser1.Navigate(_strLoginUrl);
                    _blFlg = false;
                }
                else
                {
                    MessageBox.Show(_strErrorMessage);
                    Close();
                }
            }
  • 由于使用了WebBrowser,所以有以下代码。
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlDocument doc = webBrowser1.Document;
            try
            {
                if (doc.Url.ToString() != "" && _strLoginUrl.Equals(doc.Url.ToString()))
                {
                    string strName = string.Empty;
                    string strPass = string.Empty;

                    HtmlElement heForm = doc.GetElementById("LoginForm");
                    HtmlElement heSubmit = doc.All["loginButton"];

                    strName = heForm.Children[2].GetElementsByTagName("INPUT")[0].Name;
                    strPass = heForm.Children[2].GetElementsByTagName("INPUT")[1].Name;
                    HtmlElement heUsername = doc.All[strName];
                    HtmlElement hePassword = doc.All[strPass];

                    heUsername.SetAttribute("value", _strNetUserName);
                    hePassword.SetAttribute("value", _strNetPassword);

                    heSubmit.InvokeMember("click");
                }
                else if (!_blFlg && doc.Url.ToString() != "" && _strPressUrl.Equals(doc.Url.ToString()))
                {
                    HtmlElement heLink = doc.GetElementsByTagName("A")[0];
                    heLink.InvokeMember("onclick");
                    _blFlg = true;
                }
            }
            catch
            {
                return;
            }
        }
  • 画面上有加密的点击按钮,可以根据需求加密生成的配置文件。
        private static void SaveConfig(string ConnenctionString, string strKey)
        {
            XmlDocument doc = new XmlDocument();
            //获得配置文件的全路径
            string strFileName = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
            doc.Load(strFileName);
            //找出名称为“add”的所有元素
            XmlNodeList nodes = doc.GetElementsByTagName("add");
            for (int i = 0; i < nodes.Count; i++)
            {
                //获得将当前元素的key属性
                XmlAttribute att = nodes[i].Attributes["key"];
                //根据元素的第一个属性来判断当前的元素是不是目标元素
                if (att.Value == strKey)
                {
                    //对目标元素中的第二个属性赋值
                    att = nodes[i].Attributes["value"];
                    att.Value = ConnenctionString;
                    break;
                }
            }
            //保存上面的修改
            doc.Save(strFileName);
        }


你可能感兴趣的:(C#,WinForm)