订单采集

订单采集

一、模拟登录

二、触发按钮到指定界面

三、获取界面的信息

四、把获取到的信息插入到数据库。

五、下载附件,并发送邮件。

详解: 一、把主要信息配置到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 事件加载多次。

               单独启动一个线程去捕捉 弹出的对话框,然后下载。

               界面没有加载完。

             

 

          

       

 

 

 

      

 

 

posted @ 2020-08-17 15:14  大漠有水  阅读(306)  评论(0编辑  收藏  举报