功能:
1.验证码自动识别
2.连接手机端翔教师网上学习助手
3.自动登录并模拟开始网上学习
4.自动控制各科目的学习时间。。。,以下是效果图和主要代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.Skins;
using DevExpress.XtraBars;
namespace TeacherStudy
{
public partial class frmMain : DevExpress.XtraEditors.XtraForm
{
userControls.CouseStudy cousestudy;
Dal.teacheredu client { get; set; }
public frmMain(Dal.teacheredu client)
{
this.client = client;
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = client.user.skinName;
client.OnEvent += new Dal.teacheredu.jackEventHandler(client_OnEvent);
InitSkins();
notifyIcon1.Text = this.Text;
this.Text = string.Format("{0}({1})", client.user.Nick.Split('(')[0], client.user.Workplace);
lblTime.Text = "已学:" + client.user.totalTime.Replace(" ", "").Trim();
lblNick.Text = client.user.Nick;
notifyIcon1.Text = client.user.Nick;
cousestudy = new userControls.CouseStudy(client);
cousestudy.Dock = DockStyle.Fill;
xtraTabPage1.Controls.Add(cousestudy);
barMenu.AddItem(barButtonItemExit);
barMenu.AddItem(barButtonItemMain);
barMenu.AddItem(barSkin);
barMenu.AddItem(barConfig);
barMenu.AddItem(barReg);
barMenu.AddItem(barRandomNextCouse);
}
void client_OnEvent(object sender, Dal.EventArgs e)
{
if (!e.message.Contains("秒后更新"))
{
log1.AddLog(e.message);
}
cousestudy.gridView1.RefreshData();
lblMessage.Caption = e.message;
}
private void InitSkins()
{
barManager1.ForceInitialize();
foreach (SkinContainer cnt in SkinManager.Default.Skins)
{
BarButtonItem item = new BarButtonItem(barManager1, cnt.SkinName);
barSkin.AddItem(item);
item.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(skinBtn_ItemClick);
}
}
void skinBtn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (e.Item.Caption != null)
{
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = e.Item.Caption;
client.user.skinName = e.Item.Caption;
new Dal.JackIniFile().SaveModel(client.user);
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.TopMost = true;
this.Visible = true;
this.Show();
this.WindowState = FormWindowState.Normal;
this.TopMost = false;
}
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
popupMenu1.ShowPopup(MousePosition);
}
}
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
private void barButtonItemExit_ItemClick(object sender, ItemClickEventArgs e)
{
if (DevExpress.XtraEditors.XtraMessageBox.Show("确认要退出吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
Application.ExitThread();
Application.Exit();
}
}
private void barConfig_ItemClick(object sender, ItemClickEventArgs e)
{
new frmConfig(client).ShowDialog();
}
private void barReg_ItemClick(object sender, ItemClickEventArgs e)
{
new frmReg().ShowDialog();
}
private void barRandomNextCouse_ItemClick(object sender, ItemClickEventArgs e)
{
if (cousestudy.bgWork.IsBusy)
{
cousestudy.appRunTime = DateTime.MinValue;
}
else
{
cousestudy.SetRandomNextCouse();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Text.RegularExpressions;
namespace TeacherStudy.Dal
{
public class teacheredu
{
public int waitingSeconds = 60*11;//更新服务器时间分钟
public delegate void jackEventHandler(object sender, EventArgs e);
public event jackEventHandler OnEvent;
public virtual void OnJackEvent(EventArgs e)
{
if (OnEvent != null)
OnEvent(this, e);
}
public delegate void CouseUpdateEventHandler(object sender,Model.Couse e);
public event CouseUpdateEventHandler CouseUpdateEvent;
public virtual void OnUpdateEvent(Model.Couse e)
{
if (CouseUpdateEvent != null)
CouseUpdateEvent(this, e);
}
public Model.User user { get; set; }
private string baseUrl = string.Empty;
JackWebClient client = new JackWebClient();
/// <summary>
/// 账号登陆
/// </summary>
/// <param name="uid"></param>
/// <param name="password"></param>
/// <returns></returns>
public bool Login(string username, string password,bool _360Hours)
{
if (_360Hours)
{
baseUrl = "2015sqjxjyc";
}
else
{
baseUrl = "2015sqjxjyb";
}
user = new Dal.JackIniFile().GetModel(username);
waitingSeconds = new Random().Next(650, 1100);
if (user == null) user = new Model.User();
user.UserName = username;
user.Password = password;
user._360hours = _360Hours;
int errorCount = 5;
reCheck: Bitmap bmp = new Bitmap(2, 20);
string VerifyCode=GetVerifyCode(ref bmp);
string postData = "u=" + user.UserName + "&p="+user.Password+"&c="+VerifyCode+"&i=0";
string Html = client.PostData("http://"+baseUrl+".fxl.teacheredu.cn/guopeiadmin/login/CheckUserLogin.aspx", postData, "http://2015sqjxjyb.fxl.teacheredu.cn/guopeiadmin/login/loginindex.aspx#");
errorCount--;
if (Html == "0")
{
//DevExpress.XtraEditors.XtraMessageBox.Show("验证码错误");
OnJackEvent(new EventArgs("验证码错误"));
if (errorCount > 0)
{
goto reCheck;
}
return false;
}
if (Html == "1")
{
DevExpress.XtraEditors.XtraMessageBox.Show("用户名或密码错误!");
OnJackEvent(new EventArgs("用户名或密码错误!"));
return false;
}
if (Html == "3")
{
DevExpress.XtraEditors.XtraMessageBox.Show("登陆失败!");
OnJackEvent(new EventArgs("登陆失败!"));
return false;
}
if (Html.Contains("Main.aspx"))
{
user.loginTime = DateTime.Now;
Html = client.GetHtml("http://" + baseUrl + ".fxl.teacheredu.cn/guopeiadmin/Main.aspx");
if (Html.Contains("退出"))
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(Html);
user.Uid = StringHelper.CutHtml(Html, "UserID=", "'");
user.Nick = doc.GetElementbyId("span_User").InnerText.Replace(" ","").Trim();
Html = client.GetHtml("http://" + baseUrl + ".fxl.teacheredu.cn/GuoPeiAdmin/user/UpdateUserInfo.aspx");
doc.LoadHtml(Html);
user.Workplace = doc.GetElementbyId("txtWorkplace").GetAttributeValue("value","");
UpdateHasStudyTime();//更新总学习时长
OnJackEvent(new EventArgs("登陆成功"));
return true;
}
}
OnJackEvent(new EventArgs("登陆失败"));
return false;
}
public void UpdateHasStudyTime()
{
string Html = client.GetHtml("http://" + baseUrl + ".fxl.teacheredu.cn/GuoPeiAdmin/Statistics/StudentQuery_StudentInfo.aspx");
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(Html);
user.totalTime = doc.GetElementbyId("sp_Duration").InnerText;
}
internal string GetVerifyCode(ref System.Drawing.Bitmap bitmap)
{
//需要验证图片
String verifyUrl = "http://" + baseUrl + ".fxl.teacheredu.cn/GuoPeiAdmin/login/ImageLog.aspx?time=" + DateTime.Now.Day + GetIntFromTime(DateTime.Now).ToString(); ;
//Stream img = client.GetStream(verifyUrl, "get");
frmVerifyImage frm = new frmVerifyImage();
//frm.picVerifyCode.Image = new System.Drawing.Bitmap(img);
frm.imgUrl = verifyUrl;
frm.client = client;
if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
return frm.GetVerifyCode();
}
return "";
}
public long GetIntFromTime(DateTime dt)
{
long lLeft = 621355968000000000;
DateTime dt1 = dt.ToUniversalTime();
long Sticks = (dt1.Ticks - lLeft) / 10000000;
return Sticks;
}
public List<Model.Couse> GetList( )
{
OnJackEvent(new EventArgs("获取课程......"));
client.Accept = "text/html, application/xhtml+xml, */*";
List<Model.Couse> list = new List<Model.Couse>();
string Html = client.GetHtml("http://" + baseUrl + ".fxl.teacheredu.cn/guopeiadmin/StudyPlan/StudentBookshelf.aspx", "http://2015sqjxjyb.fxl.teacheredu.cn/guopeiadmin/Main.aspx");
Html = StringHelper.CutHtml(Html, "已选课程名称", "");
Html = new Regex("<!--.*?-->", RegexOptions.IgnoreCase).Replace(Html, "");
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("<tr>[\\s\\S]*?</tr>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
foreach (System.Text.RegularExpressions.Match tr in regex.Matches(Html))
{
Model.Couse model = GetRegexModel(tr.Value);
if (model.couseName != ""&&model.time!="")
{
list.Add(model);
}
}
OnJackEvent(new EventArgs("获取("+list.Count+")个课程"));
return list;
}
Model.Couse GetRegexModel(string trHtml)
{
trHtml = trHtml.Replace("\r\n", "").Replace("\t","");
int i = 0;
Model.Couse model = new Model.Couse();
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("<td .*?>(.*?)</td>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
foreach (System.Text.RegularExpressions.Match item in regex.Matches(trHtml))
{
i++;
switch (i)
{
case 1:
{
model.couseName = StringHelper.ReplaceHtmlTag(item.Groups[0].Value) ;
model.StudyPlanBookID = StringHelper.CutHtml(item.Value, "OpenBook(", ",");
} break;
case 2: model.time = StringHelper.ReplaceHtmlTag(item.Groups[0].Value).Replace(" ", "").Trim(); break;
case 3: model.status = StringHelper.ReplaceHtmlTag(item.Groups[0].Value).Replace(" ", "").Trim(); break;
case 4: model.action = StringHelper.ReplaceHtmlTag(item.Groups[0].Value).Replace(" ", "").Trim(); break;
}
}
model.action = model.action.Trim();
if (model.action.Trim() != "必修") model.action = "选修";
return model;
}
public string EnterStudyPage(ref Model.Couse model)
{
model.log = "进入学习的页面";
OnJackEvent(new EventArgs(("进入学习的页面")));
string baseurl = "http://" + baseUrl + ".fxl.teacheredu.cn/guopeiadmin/CourseStudy/StudyfrmNew.aspx?StudyPlanBookID=" + model.StudyPlanBookID;
string Html = client.GetHtml(baseurl);
string url = "RecordTimeNew.aspx" + StringHelper.CutHtml(Html, "RecordTimeNew.aspx", "\"");
url = System.Web.HttpUtility.HtmlDecode(url);
url = new Uri(new Uri(baseurl), url).ToString();
return url;
}
public void SetFieldValue(string url,ref Model.Couse model)
{
string Html = client.GetHtml(url);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(Html);
user.Uid = doc.GetElementbyId("txtUserId").GetAttributeValue("value", "");
user.recordtime = DateTime.Now;
model.StudyPlanBookID = doc.GetElementbyId("txtBookID").GetAttributeValue("value", "");
user.start = doc.GetElementbyId("txtStart").GetAttributeValue("value", "");
}
public bool UpdateTimeForStudy(ref Model.Couse model)
{
client.Accept = "application/x-www-form-urlencoded; charset=UTF-8";
string postData = "uid=" + user.Uid + "&bid=" + model.StudyPlanBookID + "&second=" + (DateTime.Now - user.recordtime).TotalSeconds.ToString("0") + "&start=" + user.start;
string Html = client.PostData("http://" + baseUrl + ".fxl.teacheredu.cn/guopeiadmin/CourseStudy/UpdateTimeForStudy.aspx", postData, "http://2015sqjxjyb.fxl.teacheredu.cn/guopeiadmin/CourseStudy/RecordTimeNew.aspx?bookid=172&StudyPlanBookID=161");
if (Html.Split(',')[1] == "true")
{
model.log = "更新统计时间成功";
OnJackEvent(new EventArgs("更新统计时间成功"));
return true;
}
else
{
model.log = "更新统计时间失败";
OnJackEvent(new EventArgs("更新统计时间失败"));
return false;
}
}
}
}