每日自动签到签退的程序

时间:2022-03-30 07:12:11

公司里有一个网页版的考勤系统。每天打开电脑,用域账户登录,然后打开IE,输入网址,系统会自动感知你的域账户,显示个人信息,在8点半之前点击签到就不算迟到。

像下面的图这样

每日自动签到签退的程序


终于有一天由于地铁故障迟到了,于是想搞一个自动签到

考察了一下网站签到系统,可以看到这个系统大概是ASP.NET,能感知域账户说明有控件,而这个按钮链接是一个javascript函数

类似

<a id="ctl00_m_g_23105813_1daf_4c2a_b652_8ff42b3594ef_ctl00_btnCheckIn
" hideFocus="" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$m$g_23105813_1daf_4c2a_b652_8ff42b3594ef$ctl00$btnCheckIn", "", true, "", "", false, true))" jQuery15203230967361562585="58"/>

所以最好用IE内核的webbrower控件来做。
打开VS,新建C# winform工程
拖一个Webbrowser控件上去
在Form的Load事件里访问网址
   webBrowser1.Navigate("aaa.bbb.com");


在DocumentCompleted事件里
HtmlDocument webDoc = webBrowser1.Document;
HtmlElement checkinEle = webDoc.GetElementById("ctl00_m_g_23105813_1daf_4c2a_b652_8ff42b3594ef_ctl00_btnCheckIn");
if(checkinEle!=null)
{
webDoc.GetElementById("ctl00_m_g_23105813_1daf_4c2a_b652_8ff42b3594ef_ctl00_btnCheckIn").InvokeMember("click");
}


这样就可以自动点击,接下来是部署的问题
1,自动开机。联想台式机支持定时开机,进BIOS,设置每周一到五,早上8点定时开机

每日自动签到签退的程序

每日自动签到签退的程序

2,自动登录。打开注册表HKEY_LOCAL_MACHINE\SOFtware\Microsoft\Windows Nt\CurrentVersion\Winlogon,在右边找到AutoAdminilogon,将键值设为1,把DefaultUserName的值设置为需要自动登录的用户名,再新建一个字符串值DefaultPassword,设为密码,如果是域账户,再新建一个字符串值DefaultDomain,设为域的名字
3,自动启动签到程序。进入计划任务,根据向导创建一个计划,指向创建的程序
签退程序也是类似的
不过签退的时候会弹出一个对话框

每日自动签到签退的程序

它的链接里有一个onclick属性

<a id="ctl00_m_g_23105813_1daf_4c2a_b652_8ff42b3594ef_ctl00_btnCheckOut" hideFocus="" onclick="return confirm('您确定要签退吗?');" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$m$g_23105813_1daf_4c2a_b652_8ff42b3594ef$ctl00$btnCheckOut", "", true, "", "", false, true))" jQuery15203230967361562585="58"/>

在代码里可以自动确认
 HtmlDocument webDoc = webBrowser1.Document;
IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument; vDocument.parentWindow.execScript("function confirm(str){return true;} ", "javascript"); //弹出确认
webDoc.GetElementById("ctl00_m_g_23105813_1daf_4c2a_b652_8ff42b3594ef_ctl00_btnCheckOut").InvokeMember("click");