楚翔教师网上学习助手桌面版

功能:
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;
 
}
 


}
 
}
 
}
 




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunjay117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值