• 利用WebBrowser实现自动登入功能


    公司内部改革,对考勤方面做出调整,要求实现办公自动化,在OA进行上下班考勤;作为程序员,突发奇想如何实现自动化考勤应用?

    需求如下:

    1. 可设置考勤地址、用户信息、上下班时间;
    2. 根据设置的上下班时间,定时实现自动考勤。

    具体实现步骤如下:

    1. 窗体界面添加考勤地址、用户信息、上班下班时间、WebBrowser控件;
    2. 将WebBrowser地址更改为考勤地址
    3. 判断WebBrowser加载完毕后,输入用户、密码信息,点登录进入系统
    4. 采用线程阻塞形式,预估登入进入系统时间,再进入考勤菜单进行考勤

    代码实现如下:

        public partial class Form1 : Form
        {
            /// <summary>
            /// 计数器判断网页是否加载完毕
            /// </summary>
            int i = 0;
            //登入计时器
            int j = 0;
            //上班计时器
            int m = 0;
            public Form1()
            {
                InitializeComponent();
                txtUrl.Enabled = false;
                txtUser.Enabled = false;
                txtPwd.Enabled = false;
                tdtstartTime.Enabled = false;
                tdtendTime.Enabled = false;
    
                wm = GetWork();
                webBrowser.Url = wm.Url;
    
                webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBw_DocumentCompleted);
                webBrowser.Navigated += new WebBrowserNavigatedEventHandler(webBrowser_Navigated);
    
            }
    
            /// <summary>
            /// 用计数器判断界面是否加载完成
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
            {
                i++;
            }
            void webBw_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                i--;
                if (0 == i)
                {
                    if (j < 1)
                    {
                        Lognin();
                        j++;
                    }
                    if (m < 1 && j > 0)
                    {
                        HtmlDocument htmlDoc = webBrowser.Document;
                        HtmlElement txtMenuCodeQuick = htmlDoc.All["MenuCodeQuick"];
                        if (txtMenuCodeQuick != null)
                        {
                            txtMenuCodeQuick.Focus();
                            txtMenuCodeQuick.SetAttribute("value", "HR43B");
                            SendKeys.SendWait("{ENTER}");
                            m++;
                        }
                    }
                }
            }
    
            /// <summary>
            /// 登录
            /// </summary>
            void Lognin()
            {
                HtmlDocument htmlDoc = webBrowser.Document;
                HtmlElement txtUser = htmlDoc.All["txtUserCodeL"];
                txtUser.Focus();
                if (txtUser != null)
                {
                    txtUser.SetAttribute("value", wm.User);
                }
                SendKeys.SendWait(Keys.Tab.ToString());
                HtmlElement txtPassword = htmlDoc.GetElementById("txtPasswordL");
                if (txtPassword != null)
                {
                    txtPassword.SetAttribute("value", wm.Password);
                }
                Thread.Sleep(1000);
    
                HtmlElement btnDl = htmlDoc.GetElementById("ctl00$ctl00$c1$CB$btnLogin");
                btnDl.InvokeMember("click");
                Thread.Sleep(1000);
            }
    
            private Workmanger GetWork()
            {
                Uri u = new Uri(txtUrl.Text);
                wm.Url = u;
                wm.User = txtUser.Text;
                wm.Password = txtPwd.Text;
                wm.StratTime = tdtstartTime.Time;
                wm.EndTime = tdtendTime.Time;
                return wm;
            }
    
            //根据指定url地址打开页面
            void OpenIE(Uri url)
            {
                webBrowser.Url = url;
            }
    
            private Workmanger wm = new Workmanger();
    
            void EndWork()
            {
                HtmlDocument htmlDoc = webBrowser.Document;
                HtmlElement rtbText = htmlDoc.All["ctl00_ctl00_c1_H1_WsdBasicToolBar1"];
                StringBuilder sb = new StringBuilder();
                foreach (HtmlElement item in htmlDoc.All)
                {
                    sb.AppendLine(item.Id);
                }
                File.WriteAllText(@"d:html.txt", sb.ToString(), Encoding.UTF8);
             }
        }
    
        /// <summary>
        /// 考勤系统类
        /// </summary>
        public class Workmanger
        {
            /// <summary>
            /// 地址
            /// </summary>
            public Uri Url { get; set; }
            /// <summary>
            /// 用户名
            /// </summary>
            public string User { get; set; }
    
            /// <summary>
            /// 密码
            /// </summary>
            public string Password { get; set; }
    
            /// <summary>
            /// 上班时间
            /// </summary>
            public DateTime? StratTime { get; set; }
    
            /// <summary>
            /// 下班时间
            /// </summary>
            public DateTime? EndTime { get; set; }
        }
  • 相关阅读:
    js中异步方案比较完整版(callback,promise,generator,async)
    10分钟搞懂toString和valueOf函数(详细版)
    Angular ViewChild
    Angular动画
    Angular组件之间的通讯
    用12个例子全面示范Angular的模板语法
    使用c++为node.js扩展模块
    requestAnimationFrame 实现JS动画
    使用CSS修改HTML5 input placeholder颜色
    js数组的方法
  • 原文地址:https://www.cnblogs.com/tuqun/p/4155465.html
Copyright © 2020-2023  润新知