利用WebBrowser实现自动登入功能
公司内部改革,对考勤方面做出调整,要求实现办公自动化,在OA进行上下班考勤;作为程序员,突发奇想如何实现自动化考勤应用?
需求如下:
- 可设置考勤地址、用户信息、上下班时间;
- 根据设置的上下班时间,定时实现自动考勤。
具体实现步骤如下:
- 窗体界面添加考勤地址、用户信息、上班下班时间、WebBrowser控件;
- 将WebBrowser地址更改为考勤地址
- 判断WebBrowser加载完毕后,输入用户、密码信息,点登录进入系统
- 采用线程阻塞形式,预估登入进入系统时间,再进入考勤菜单进行考勤
代码实现如下:
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实现自动登入功能的更多相关文章
- Ubuntu获取root 权限,开机自动登入root
新机器获取root权限,只需要给root 增加密码: sudo passwd root 修改开机自动登入: #sudo gedit /etc/lightdm/lightdm.conf 修改参数: au ...
- 网络爬虫之requests模块的使用+Github自动登入认证
本篇博客将带领大家梳理爬虫中的requests模块,并结合Github的自动登入验证具体讲解requests模块的参数. 一.引入: 我们先来看如下的例子,初步体验下requests模块的使用: ...
- python selenium 多账户自动登入163邮箱
pycharm一些快捷键: ' ctrl ' +' / ' :注释 ' Tab ' :同时缩进 ' shift ' +' Tab ' :左移 一次缩进 本文webinfo.txt路径:C:\Pytho ...
- Node.js+Express+MongoDB数据库实现网页注册登入功能
通过 Node.js + Express + MongoDB 实现网页注册账号 和 登入账号的功能 项目准备: 1: 事先准备好项目的页面 (首页页面 index.html)(登入页面 login.h ...
- ssh自动登入
公司的服务器在国外,所以测试的查看日志的时候需要测试机,然后继续ssh 非常不方便,所以编写一个简单的ssh登入脚本 #!/usr/bin/expectset timeout 3spawn ssh n ...
- java web实现在cookie中保存用户名和密码,用户自动登入
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- python_Django 实现登入功能form表单的参数接收处理
1.创建Django工程. 参考https://www.cnblogs.com/CK85/p/10159159.html中步骤. 2.在urls.py文件中添加url分发路径 "" ...
- Android接受验证码自动填入功能(源码+已实现+可用+版本兼容)
实际应用开发中,会经常用到短信验证的功能,这个时候如果再让用户就查看短信.然后再回到界面进行短信的填写,难免有多少有些不方便,作为开发者.本着用户至上的原则我们也应该来实现验证码的自动填写功能,还有一 ...
- CentOS7 下使用root免密码输入自动登入gnome桌面
如果系统默认启动图形界面: vi /etc/gdm/custom.conf #找到[daemon],修改为下面的 [daemon] AutomaticLoginEnable=true Automati ...
随机推荐
- Xcode 10 关于 CocoaPods 安装失败的问题RuntimeError
xcode 10的情况下执行pod install报错了 RuntimeError - [!] Xcodeproj doesn't know about the following attribute ...
- jQuery 实战读书笔记之第四章:使用特性、属性和数据
使用属性 /* 每个元素都有一或多个特性,,这些特性的用途是给出相应元素或其内容的附加信息.(出自 JavaScript 高级程序设计) */ /* 特性是固有的 JavaScript 对象 属性指的 ...
- 5plus
http://124.173.121.89/wx/index.html?1410766859789
- php 扩展模块添加
1. 新增安装扩展模块的位置 [root@node_22 ~]# ls /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/ op ...
- list<> 中find的使用
昨天要在 std::list<std::string> 中判断是否存在某一字符串 std::string . 我首先想到的是 list迭代+std::string重载的"==&q ...
- vb 定时执行php程序
托盘模块 Option Explicit Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const ...
- Java反射机制的作用?
Java反射机制的作用? 解答:Java反射机制的作用是: 1)在运行时判断任意一个对象所属的类. 2)在运行时构造任意一个类的对象. 3)在运行时判断任意一个类所具有的成员变量和方法. 4)在运行时 ...
- 2017 ACM区域赛(西安) 参赛流水账
day 0: 周五, 鸽了概统课,早上和紫金港的几位小伙伴一起打车去萧山机场,从咸阳机场到西北工业大学坐了五十多个站的公交车,感觉身体被掏空.晚上在宾馆本来打算补之前训练的一个题,想想还是先花个十来分 ...
- 【BZOJ】2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2101 这个dp真是神思想orz 设状态f[i, j]表示i-j先手所拿最大值,注意,是先手 所以转移 ...
- java和C#异常处理的差异
Java异常处理和C#非常相似,不过Java中支持强制异常处理方式, 一旦方法加入了throws关键字,那么调用这个方法的类就必须加上try和catch进行异常处理, 如果不处理(没有try catc ...