利用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 ...
随机推荐
- NPOI 导出Excel图片 (网络)
导出网络图片,需要将网络图片下载到本地或者内存流中,建议下载的时候使用缩略图: 高清图片效率慢: Uri uri = new Uri(imgPath); //imgPath :网络图片地址 WebRe ...
- Ubuntu下修改tomcat6默认的8080端口
$ sudo vi /etc/tomcat6/server.xml 将 <Connector port="8080" protocol="HTTP/1.1&qu ...
- FastDFS安装详解
1.安装环境 os:centos6.5 Fastdfs版本:FastDFS_v5.08.tar.gz 下载地址:https://sourceforge.net/projects/fastdfs/fil ...
- ES博客链接
https://blog.csdn.net/laoyang360/article/details/78290484
- EasyUI的window加载的页面不执行js问题说明
http://364434006.iteye.com/blog/1671907 ———————————————————————————————————————————————————————————— ...
- VC中怎么输入特殊符号(如平方、立方等下标符号)
同在列表控件里显示汉字一样,直接把输入法里特殊字符放进一个数组里,然后再赋值:CString F[]={"m²","∑","±"," ...
- UE寻找Actor
void FTestButtonModule::PluginButtonClicked() { GEngine->AddOnScreenDebugMessage(-, .f, FColor::R ...
- boost - 正则表达式xpressive
正则表达式是一套处理文本强有力的工具: 它使用一套复杂的语法规则,可以解决文本处理领域的绝大多数问题; 而这些问题通常是字符串算法很难甚至无法解决的. C++98标准中没有内置的正则表达式支持,使得 ...
- iOS-常用宏定义
下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...
- SQL Server数据库实例名与服务器名不一致的解决办法
SQL Server数据库实例名与服务器名不一致的解决办法 --EXEC sp_addlinkedserver -- @server = 'PSHGQ' --GO --select * from ...