利用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; }
    }
时间: 2024-10-29 17:21:21

利用WebBrowser实现自动登入功能的相关文章

Node.js+Express+MongoDB数据库实现网页注册登入功能

通过 Node.js + Express + MongoDB 实现网页注册账号 和 登入账号的功能 项目准备: 1: 事先准备好项目的页面 (首页页面 index.html)(登入页面 login.html) (注册页面 register.html) 2:    安装好 Node.js 需要使用的第三方模板 3:  设计路径设计 4:  理清功能需求 5:  创建 app.js  router.js   mgdb.js 三个 js 文件  和 public 和 views 文件夹 作用: app

Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以自行注册,得到APPKEY和APPSECRET,然后下载SDK,包的导入方式如截图: 二.主要代码 SMSSendForRegisterActivity.java:(获取验证码页) package com.qiandaobao.activity; import java.util.regex.Mat

根文件系统添加用户登入功能

1:再启动文件系统的时候为什么没有出现用户登入界面 在文件inittab中,::respawn:-/bin/sh被执行时,直接进入了命令行,因此不会显示用户登入界面,因此添加用户登入界面需要在这里做文章.2:busybox如何实现用户登入我们知道busybox是很多可执行程序的集合,busybox中也集成了用户登入的命令,分别是/bin/login和/sbin/gettty3:添加用户登入界面结合前面所述只需要将::respawn:-/bin/sh改为::respawn:-/bin/login或

python_Django 实现登入功能form表单的参数接收处理

1.创建Django工程. 参考https://www.cnblogs.com/CK85/p/10159159.html中步骤. 2.在urls.py文件中添加url分发路径 """Django_test URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/top

Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结

Identity学习笔记 Asp.Net Identity学习笔记+MVC5默认项目解析_基础用法 Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结 Identity学习笔记第三方登入配置登入案例登入技术总结本地,已登入本地,未登入第三方登入 第三方登入 本文介绍Identity的第三方登入技术.到目前为止只介绍了CookieAuthentication这种授权方式,即浏览

[ASP.NET MVC] ASP.NET Identity登入技术剖析

[ASP.NET MVC] ASP.NET Identity登入技术剖析 前言 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授权等等机制.本篇文章介绍ASP.NET Identity在执行登入功能时,与浏览器.还有第三方验证服务之间的运作流程.主要为自己留个纪录,也希望能帮助到有需要的开发人员.(本篇内容大幅度简化了ASP.NET Identity的运作细节,用以传达登入功能的运作概念.实际ASP.NET Identity在运作的时候,比本篇说明的复杂很

两种方法实现Linux不活动用户登录超时后自动登出

在平常的工作中,windows系统使用的比较多一些,身边的很多同事都会对自己的电脑进行一些个性化设置,比如离开一段时间后自动锁屏.自动关闭屏幕.自动注销当前登录等.在windows下可以这样操作,那么在Linux下是否也可以这样操作呢?经过一段时间的摸索,本人发现了2中方法来实现Linux下不活动用户在登录一段时间后自动登出操作,分享给大家. 方法一.通过修改.bashrc或.bash_profile文件来实现 通过修改home目录下的.bashrc或.bash_profile文件来实现.这两个

利用webbrowser自动查取地点坐标

概述 有时候我们需要去查询某些地点的坐标,那么我们可以用百度提供的坐标拾取系统http://api.map.baidu.com/lbsapi/getpoint/index.html,但是会发现它只能一个一个的查,还要不停的点击,要是查询的量特别大,比如说要查某个省的所有村,甚至全国所有村的坐标怎么办,人工查寻绝对会累趴下.所以我就写了一个这样的工具:自动查取地点坐标工具 功能 现在这个工具主要是针对的村和镇,因为查询市,县范围比较大,百度的坐标拾取系统也经常拾取不到坐标. 1.数据框要求输入是j

利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)

利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)作者:Tuuzed(土仔)   发表于:2008年3月3日23:12:38 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.http://www.cppblog.com/tuuzed/archive/2008/03/03/43631.html 可能很多人都知道NT系统的query user命令,命令返回“使用者名称 工作阶段名称 识别码 状态 闲置时间 登入时间”.如图