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

需求如下:

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

具体实现步骤如下:

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

代码实现如下:

    public partial class Form1 : Form
{
/// <summary>
/// 计数器判断网页是否加载完毕
/// </summary>
int i = ;
//登入计时器
int j = ;
//上班计时器
int m = ;
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 ( == i)
{
if (j < )
{
Lognin();
j++;
}
if (m < && j > )
{
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(); HtmlElement btnDl = htmlDoc.GetElementById("ctl00$ctl00$c1$CB$btnLogin");
btnDl.InvokeMember("click");
Thread.Sleep();
} 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; }
}

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

  1. Ubuntu获取root 权限,开机自动登入root

    新机器获取root权限,只需要给root 增加密码: sudo passwd root 修改开机自动登入: #sudo gedit /etc/lightdm/lightdm.conf 修改参数: au ...

  2. 网络爬虫之requests模块的使用+Github自动登入认证

    本篇博客将带领大家梳理爬虫中的requests模块,并结合Github的自动登入验证具体讲解requests模块的参数. 一.引入:   我们先来看如下的例子,初步体验下requests模块的使用: ...

  3. python selenium 多账户自动登入163邮箱

    pycharm一些快捷键: ' ctrl ' +' / ' :注释 ' Tab ' :同时缩进 ' shift ' +' Tab ' :左移 一次缩进 本文webinfo.txt路径:C:\Pytho ...

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

    通过 Node.js + Express + MongoDB 实现网页注册账号 和 登入账号的功能 项目准备: 1: 事先准备好项目的页面 (首页页面 index.html)(登入页面 login.h ...

  5. ssh自动登入

    公司的服务器在国外,所以测试的查看日志的时候需要测试机,然后继续ssh 非常不方便,所以编写一个简单的ssh登入脚本 #!/usr/bin/expectset timeout 3spawn ssh n ...

  6. java web实现在cookie中保存用户名和密码,用户自动登入

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

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

    1.创建Django工程. 参考https://www.cnblogs.com/CK85/p/10159159.html中步骤. 2.在urls.py文件中添加url分发路径 "" ...

  8. Android接受验证码自动填入功能(源码+已实现+可用+版本兼容)

    实际应用开发中,会经常用到短信验证的功能,这个时候如果再让用户就查看短信.然后再回到界面进行短信的填写,难免有多少有些不方便,作为开发者.本着用户至上的原则我们也应该来实现验证码的自动填写功能,还有一 ...

  9. CentOS7 下使用root免密码输入自动登入gnome桌面

    如果系统默认启动图形界面: vi /etc/gdm/custom.conf #找到[daemon],修改为下面的 [daemon] AutomaticLoginEnable=true Automati ...

随机推荐

  1. linux常用命令系列

    自己开始接触linux系统已经两年了,刚到现场进行系统维护的时候,只知道ls和cd命令,所以我被迫开始学习linux,虽然现在每天都在linux系统上进行一些操作,但是感觉自己半路出家一样:可能知道某 ...

  2. JVM Specification 9th Edition (4) Chapter 3. Compiling for the Java Virtual Machine

    Chapter 3. Compiling for the Java Virtual Machine 内容列表 3.1. Format of Examples 3.2. Use of Constants ...

  3. JVM参数MetaspaceSize的误解

    前言 昨天谢照东大神在群里提出一个问题:怎么查看Metaspace里具体包含的是什么,起因是他的某个服务设置了-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=5 ...

  4. bjposition

    背景位置:background-origin:content-box;//"border-box", "padding-box", "content- ...

  5. 【PM面试题】如果让你创业,你会选择什么?

    答案及理由 我会选择可穿戴设备 ,理由有三: 互联网与硬件的结合是未来的大势所趋,通过硬件来采集数据,而通过互联网或者移动互联网将这些设备连接起来,交换数据,让其形成流动的信息. 未来会从卖产品的阶段 ...

  6. 第一百四十六节,JavaScript,百度分享保持居中--下拉菜单

    JavaScript,百度分享保持居中--下拉菜单 百度分享保持居中 效果图 html代码 <div id="share"> <h2>分享到</h2& ...

  7. jdk与jre的区别(转)

    很多程序员已经干了一段时间java了依然不明白jdk与jre的区别.JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境. ...

  8. js创建form添加input项目并提交表单

    var generateHideElement = function (name, value) { var tempInput = document.createElement("inpu ...

  9. spark(1.1) mllib 源码分析(三)-朴素贝叶斯

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...

  10. redo

    --创建redosize的视图create or replace view redo_size as select value from v$mystat, v$statname where v$my ...