总是迟到有点烦 还会被说
怎么说楼主也是一个.net 软件工作者
想写一个自动打卡的 占时没有啥思路 因为我们的OA 是POST 提交 想问问大神么 这个应该怎么实现
PS 告诉我思路就可以了 谢谢~~~~
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net; 5 using System.IO; 6 using System.Threading; 7 8 9 namespace Omd 10 { 11 public static class Attendendance 12 { 13 public static int CheckIn(UserInfo info) 14 { 15 Stream outstream = null; 16 Stream instream = null; 17 StreamReader sr = null; 18 HttpWebResponse response = null; 19 HttpWebRequest request = null; 20 string content = null; 21 Encoding encoding = Encoding.UTF8; 22 byte[] data = encoding.GetBytes(info.PostInfo); 23 try 24 { 25 // 设置参数 26 request = (HttpWebRequest)WebRequest.Create(info.Oaip); 27 CookieContainer cookieContainer = new CookieContainer(); 28 request.CookieContainer = cookieContainer; 29 request.AllowAutoRedirect = true; 30 request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"; 31 request.Method = "POST"; 32 request.ContentType = "text/plain; charset=UTF-8"; 33 request.ContentLength = data.Length; 34 35 outstream = request.GetRequestStream(); 36 outstream.Write(data, 0, data.Length); 37 outstream.Close(); 38 39 //发送请求并获取相应回应数据 40 response = (HttpWebResponse)request.GetResponse(); 41 42 //直到request.GetResponse()程序才开始向目标网页发送Post请求 43 instream = response.GetResponseStream(); 44 sr = new StreamReader(instream, encoding); 45 46 //返回结果网页 47 content = sr.ReadToEnd(); 48 if (content.Length > 0) 49 { 50 return 1; 51 } 52 else { return 0; } 53 } 54 catch { return 0; } 55 } 56 public static string GetViewState(UserInfo info) 57 { 58 string URI = info.Oaip; 59 HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest; 60 request.Method = "POST"; 61 request.KeepAlive = false; 62 63 //// 接收返回的页面 64 HttpWebResponse response = request.GetResponse() as HttpWebResponse; 65 System.IO.Stream responseStream = response.GetResponseStream(); 66 System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8); 67 string srcString = reader.ReadToEnd(); 68 69 //// 获取页面的 VeiwState 70 string viewStateFlag = "id=\"__VIEWSTATE\" value=\""; 71 int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length; 72 int j = srcString.IndexOf("\"", i); 73 string viewState = srcString.Substring(i, j - i); 74 75 //// 获取页面的 EventValidation 76 string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\""; 77 i = srcString.IndexOf(eventValidationFlag) + eventValidationFlag.Length; 78 j = srcString.IndexOf("\"", i); 79 string eventValidation = srcString.Substring(i, j - i); 80 81 // 将文本转换成 URL 编码字符串 82 viewState = System.Uri.EscapeDataString(viewState); 83 eventValidation = System.Uri.EscapeDataString(eventValidation); 84 string btn = System.Uri.EscapeDataString("下班签到"); 85 string formatString = 86 "ctl00$ContentPlaceHolder1$ASPxRoundPanel1$SubC2={0}&__VIEWSTATE={1}&__EVENTVALIDATION={2}"; 87 string postString = 88 string.Format(formatString, btn, viewState, eventValidation); 89 90 // 返回提交的字符串 91 return postString; 92 93 94 } 95 } 96 }
写个 form 提交,
具体提交地址,提交参数,研究研究!
祝你好运,小心被发现了 ....
我到也是想,目前研究中
如果OA是外网可以访问的话,你可以在快要迟到时用手机登录OA打卡。
要是觉得有必要做成自动的话,可以用HttpWebRequest将打卡的Form数据Post提交给OA。
滴个是局域网的 所以说不能用手机
打卡时间记得搞个随机数,不然一查数据库就暴露了。
最笨蛋的方法,就是写个web的ui测试,就是这个测试程序会打开一游览器(指定的地址),然后输入参数,然后提交,ok了
前提是你那个电脑,过了一夜,没有待机啊
最好写个手机应用程序。会更好
难不成你在家里还想打卡吗。。
@宇称不守恒: 送你两个字:灵活
滴个是局域网的 所以说不能用手机
写个 form 提交,
我写好了 可是不成功啊 为什么了!!!!!!!!
每天不关机吗,还是说你要放在服务器上
还不如跟老板说 把打卡撤掉
这个太简单了。。。。
搞清楚 from 提交的字段 然后自己写一个类似的页面 使用时间函数 到某一个时间点自动提交一次 建议你放在服务器上
简单得不能再简单了,最好写个手机程序,设置一个定时打卡功能。
局域网!!
@林宇: 你开始又没说是局域网,如果局域网,那就更简单了。你写个WinForm,内设一个webbrowser控件,其URL初始为你打卡的url路径,并且把你的卡号作为参数传递过去,就妥了,设置这个WinForm程序开机自动启动,你再把计算机弄成每天自动开机。你别告诉我你不会想办法设置自动开机。如果你办不到,建议你还是回老家放牛去。