订单采集
订单采集
一、模拟登录
二、触发按钮到指定界面
三、获取界面的信息
四、把获取到的信息插入到数据库。
五、下载附件,并发送邮件。
详解: 一、把主要信息配置到xml,如用户名、密码、登录地址、邮箱等。
二、登录成功后、获取界面的链接到指定界面。
三、链接到指定界面,获取界面信息。
四、根据界面获取信息,并处理信息。
五、触发保存附件,并发送邮件。
代码详解:
一、加载配置文件,并登录。
string spath = System.IO.Path.Combine(Application.StartupPath, "LocalSetting.xml");//配置文件
ds.ReadXml(spath);//加载配置文件
this.Text = "订单采集服务端(" + ds.Tables[0].Rows[0]["title"].ToString() + ")"; //显示标题
this.wb1.Navigate(ds.Tables[0].Rows[0]["login"].ToString()); //加载登录地址
HtmlDocument doc = this.webBrowser1.Document;
HtmlElement userEle = doc.GetElementById("j_username");
HtmlElement pwdEle = doc.GetElementById("j_password");
userEle.SetAttribute("value", ds.Tables[0].Rows[0]["user"].ToString());
pwdEle.SetAttribute("value", ds.Tables[0].Rows[0]["pwd"].ToString());
HtmlElement btnEle = doc.GetElementById("J_sidebar_login");
if (btnEle != null)
{
btnEle.InvokeMember("click"); //登录
}
二、 链接到指定界面
HtmlDocument doc = this.webBrowser1.Document;
HtmlElement listEle = doc.GetElementById("todo-row");
if (listEle != null)
{
HtmlElementCollection liEle = listEle.GetElementsByTagName("a");
HtmlElementCollection liEle1 = listEle.GetElementsByTagName("i");
if (liEle.Count > 0)
{
string Interface = listEle.OuterText.Trim();
string NotRead = ""; //未阅
string link_no = ""; //链接
string[] lsvalues = Interface.ToString().Split(new char[] { '\r', '\n' });
if (lsvalues.Length == 63 || lsvalues.Length == 53 || lsvalues.Length == 43 || lsvalues.Length == 73)
{
NotRead = lsvalues[18].Replace("\t", "").ToString().Trim();//未阅
link_no = lsvalues[22].Replace("\t", "").ToString().Trim();//链接
if (NotRead == "未阅订单")
{
liEle[0].InvokeMember("click");//跳转到未阅订单
m_bRead = true;
}
}
}
}
三、获取界面信息
HtmlDocument doc = this.webBrowser1.Document;//加载订单详情界面
HtmlElementCollection spanlist = doc.GetElementsByTagName("span");//取订单号(第二十一个)
if (spanlist != null)
{
string order_no = doc.GetElementsByTagName("span")[26].InnerText;//订单号
string order_name = doc.GetElementsByTagName("span")[24].InnerText;//订单名称
string order_date = doc.GetElementsByTagName("span")[52].InnerText;//交货日期
}
HtmlElementCollection tbListEle = doc.GetElementsByTagName("table");//取table
dt=new datatabe(); // 声明dt
if (tbListEle != null)
{
string tb1 = tbListEle[0].OuterText.ToString();
HtmlElementCollection trListEle = tbListEle[2].GetElementsByTagName("tr");
if (trListEle != null)
{
HtmlElementCollection thList = trListEle[0].GetElementsByTagName("th");
foreach (HtmlElement thEle in thList)
{
if (thEle != null)
{
string lsName = thEle.InnerText == null ? "" : thEle.InnerText.ToString();
//MessageBox.Show(lsName);
if (lsName != "")
{
dt.Columns.Add(lsName); // 声明dt
}
}
}
}
HtmlElementCollection trListEle3 = tbListEle[3].GetElementsByTagName("tr");//赋值给dt
if (trListEle3 != null)
{
foreach (HtmlElement thEle in trListEle3)
{
string lsName = "";
if (thEle != null)
{
lsName = thEle.InnerText == null ? "" : thEle.InnerText.ToString();
}
string no = "";
string ls_sku = "";
string ls_skudescr = "";
decimal ln_qty = 0;
string lsvalue = lsName;
string[] lsvalues = lsvalue.ToString().Split(new char[] { '\r', '\n' });
if (lsvalues.Length == 37)
{
no = lsvalues[4].Replace("\t", "").ToString().Trim();//序号
ls_sku = lsvalues[8].Replace("\t", "").ToString().Trim();//料号
ls_skudescr = lsvalues[12].Replace("\t", "").ToString().Trim();//料号
ln_qty = Convert.ToInt32(lsvalues[16].Replace("\t", "").ToString().Trim());//数量
DataRow ldr = dt.NewRow();
ldr["No."] = no;
ldr["零件号"] = ls_sku;
ldr["零件说明"] = ls_skudescr.ToString();
ldr["需求数量"] = ln_qty;
dt.Rows.Add(ldr);
}
}
}
}
四、获取 数据dt后,根据自己的需求去做处理。
五、点击保存,弹出对话框, 属于系统级窗口,需要单独启动线程,去捕捉。默认下载到IE浏览器指定的文件夹中。
然后发送邮件,带附件。
邮件发送的代码,网上很多,可以自己去寻找。
第一次做订单采集,中间遇到很多问题。
如: webBrowser1_DocumentCompleted 事件加载多次。
单独启动一个线程去捕捉 弹出的对话框,然后下载。
界面没有加载完。