//获取表单控件列表 private void GetOrderFormContent(string orderPage) { string frmContent, inputContent; Match tempMatch; bool addressInfoGeted = false; MatchCollection matches = Regex.Matches(orderPage, "<form\\s+name\\s*=\\s*\"mainform\"\\s+.*?>.*?<\\s*/\\s*form\\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (matches.Count > 0) { auctionLog.Log("通知:发现了订单页面中的表单"); frmContent = matches[0].ToString(); matches = Regex.Matches(frmContent, "<\\s*(?<control>input|select|textarea).*?>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (matches.Count > 0) { auctionLog.Log("通知:发现了订单页面表单中的input控件"); foreach (Match match in matches) { InputControl inputControl = new InputControl(); inputContent = match.ToString(); tempMatch = Regex.Match(inputContent, "name\\s*=\\s*[\"\'](?<name>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { inputControl.Control = match.Groups["control"].ToString(); inputControl.Name = tempMatch.Groups["name"].ToString(); //读取收货地址信息 if (!addressInfoGeted && inputControl.Control.ToLower() == "input" && inputControl.Name.ToLower() == "address") { tempMatch = Regex.Match(inputContent, "ah:params\\s*=\\s*[\"\'](?<params>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressParams = tempMatch.Groups["params"].ToString(); tempMatch = Regex.Match(addressParams, "id\\s*=\\s*(?<id>\\d+)\\s*\\^\\^", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.Id = tempMatch.Groups["id"].ToString(); tempMatch = Regex.Match(addressParams, "address\\s*=\\s*(?<address>.*?)\\s*\\^\\^", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.Address = tempMatch.Groups["address"].ToString(); tempMatch = Regex.Match(addressParams, "postCode\\s*=\\s*(?<postCode>\\d+)\\s*\\^\\^", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.Postcode = tempMatch.Groups["postCode"].ToString(); tempMatch = Regex.Match(addressParams, "addressee\\s*=\\s*(?<addressee>.*?)\\s*\\^\\^", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.Addressee = tempMatch.Groups["addressee"].ToString(); tempMatch = Regex.Match(addressParams, "phone\\s*=\\s*(?<phone>.*?)\\s*\\^\\^", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.Phone = tempMatch.Groups["phone"].ToString(); tempMatch = Regex.Match(addressParams, "mobile\\s*=\\s*(?<mobile>\\d+)\\s*\\^\\^", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.Mobile = tempMatch.Groups["mobile"].ToString(); tempMatch = Regex.Match(addressParams, "areaCode\\s*=\\s*(?<areaCode>\\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); addressInformation.AreaCode = tempMatch.Groups["areaCode"].ToString(); addressInfoGeted = true; } tempMatch = Regex.Match(inputContent, "value\\s*=\\s*[\"\'](?<value>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { inputControl.Value = tempMatch.Groups["value"].ToString(); } tempMatch = Regex.Match(inputContent, "type\\s*=\\s*[\"\'](?<type>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { inputControl.Type = tempMatch.Groups["type"].ToString(); } //读取验证码信息 if (inputControl.Name.Trim().ToLower() == "ischeckcode" && inputControl.Value.Trim().ToLower() == "true") { isCheckCode = true; } if (inputControl.Name.Trim().ToLower() == "encryptstring") { encryptString = inputControl.Value; } inputControls.Add(inputControl); } } } } }
private void btnLogin_Click(object sender, EventArgs e) { if (String.IsNullOrEmpty(txtName.Text.Trim())) { MessageBox.Show("请输入用户名!"); txtName.Focus(); return; } if (String.IsNullOrEmpty(txtPassword.Text.Trim())) { MessageBox.Show("请输入密码!"); txtPassword.Focus(); return; } auctionLog.ShowForm(); isLoged = auctionOperations.Login(txtName.Text.Trim(), txtPassword.Text.Trim(), out ccReturned); cc.Add(ccReturned); if (isLoged) { auctionLog.Log("通知:登录成功"); btnLogin.Text = "重新登录"; } else { auctionLog.Log("警告:登录失败"); } }
//提取表单内容 public void GetProductFormContent() { if (string.IsNullOrEmpty(productPage)) { auctionLog.Log("警告:传递的商品页源代码字符串为空"); return; } //提取问题并要求回答 Match questionMatch = Regex.Match(productPage, "<div\\s*class\\s*=\\s*\"\\s*disqualified\\s*\".*?<\\s*br.*?>(?<question>.*?)\\s*<\\s*/\\s*div>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (questionMatch.Success) { string question = string.Empty; string questionContent = questionMatch.Groups["question"].ToString(); MatchCollection charMatches = Regex.Matches(questionContent, "&#(?<number>\\d+)\\s*;", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (charMatches.Count > 0) { foreach (Match match in charMatches) { int charNumber = int.Parse(match.Groups["number"].ToString()); question += Convert.ToChar(charNumber); } } if (!string.IsNullOrEmpty(question)) { questionForm.lblQuestion.Text = question; questionForm.ShowDialog(); questionAnswer = questionForm.txtAnswer.Text.Trim(); } } string frmContent, inputContent, tempStr; Match tempMatch; MatchCollection matches = Regex.Matches(productPage, "<form\\s+id\\s*=\\s*\"J_FrmBid\"\\s+.*?>.*?<\\s*/\\s*form\\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (matches.Count > 0) { auctionLog.Log("通知:发现了商品页面中表单"); frmContent = matches[0].ToString(); //提取各个input控件的内容存入dict字典 matches = Regex.Matches(frmContent, "<\\s*input.*?>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (matches.Count > 0) { auctionLog.Log("通知:在商品页面的表单中发现了input控件"); foreach (Match match in matches) { inputContent = match.ToString(); tempMatch = Regex.Match(inputContent, "name\\s*=\\s*[\"\'](?<name>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { tempStr = tempMatch.Groups["name"].ToString(); productInputDict.Add(tempStr, ""); tempMatch = Regex.Match(inputContent, "value\\s*=\\s*[\"\'](?<value>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); productInputDict[tempStr] = tempMatch.Groups["value"].ToString(); } } } } }
//获取验证码验证信息的方法 public string GetNewCheckCode(OrderPageHandle.CheckCode checkCode, CookieContainer ccEntered, out CookieCollection ccReturned) { if (string.IsNullOrEmpty(checkCode.J_checkCodeUrl)) { auctionLog.Log("警告:获取newCheckCode的URL地址为空"); ccReturned = new CookieCollection(); return(string.Empty); } HttpWebRequest request; HttpWebResponse response; string queryString = "isCheckCode=" + checkCode.isCheckCode + "&" + "encrypterString=" + checkCode.encrypterString + "&" + "sid" + checkCode.sid + "&" + "gmtCreate" + checkCode.gmtCreate + "&" + "checkCodeIds" + checkCode.checkCodeIds + "&" + "checkCode=" + checkCode.checkCode; request = (HttpWebRequest)HttpWebRequest.Create(checkCode.J_checkCodeUrl + "?" + queryString); request.Method = "GET"; request.ProtocolVersion = HttpVersion.Version11; //request.Connection = "keep-alive"; request.ContentType = " application/x-www-form-urlencoded; charset=UTF-8"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.861.0 Safari/535.2"; request.Accept = "*/*"; request.Referer = "http://buy.taobao.com/auction/buy_now.jhtml"; //request.Headers.Add("Connection", "keep-alive"); request.Headers.Add("X-Requested-With", "XMLHttpRequest"); request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); request.Headers.Add("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3"); request.CookieContainer = ccEntered; request.AllowAutoRedirect = true; response = (HttpWebResponse)request.GetResponse(); ccReturned = response.Cookies; Stream st; st = response.GetResponseStream(); if (response.ContentEncoding.ToLower().Contains("gzip")) { st = new GZipStream(st, CompressionMode.Decompress, true); } string htmlText = string.Empty; StreamReader stReader = new StreamReader(st, Encoding.Default); htmlText = stReader.ReadToEnd(); stReader.Close(); st.Close(); auctionLog.ShowTextInForm(response.ResponseUri.ToString(), htmlText); response.Close(); return(htmlText); }
//获取表单控件列表 private void GetOrderFormContent(string orderPage) { string frmContent, inputContent; Match tempMatch; MatchCollection matches = Regex.Matches(orderPage, "<form\\s+id\\s*=\\s*\"J_Form\"\\s+.*?>.*?<\\s*/\\s*form\\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (matches.Count > 0) { auctionLog.Log("通知:发现了订单页面中的表单"); frmContent = matches[0].ToString(); //读取获取newCheckCode的地址 tempMatch = Regex.Match(frmContent, "J_checkCodeUrl.*?value\\s*=\\s*\"(?<checkCodeUrl>.*?)\"", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { checkCode.J_checkCodeUrl = tempMatch.Groups["checkCodeUrl"].ToString(); } matches = Regex.Matches(frmContent, "<\\s*(?<control>input|textarea|select).*?>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (matches.Count > 0) { auctionLog.Log("通知:发现了订单页面表单中的input控件"); foreach (Match match in matches) { InputControl inputControl = new InputControl(); inputContent = match.ToString(); tempMatch = Regex.Match(inputContent, "name\\s*=\\s*[\"\'](?<name>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { inputControl.Control = match.Groups["control"].ToString(); inputControl.Name = tempMatch.Groups["name"].ToString(); tempMatch = Regex.Match(inputContent, "value\\s*=\\s*[\"\'](?<value>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { inputControl.Value = tempMatch.Groups["value"].ToString(); } tempMatch = Regex.Match(inputContent, "type\\s*=\\s*[\"\'](?<type>.*?)[\"\']", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); if (tempMatch.Success) { inputControl.Type = tempMatch.Groups["type"].ToString(); } inputControls.Add(inputControl); //读取获取newCheckCode所需的信息 if (inputControl.Name.Trim().ToLower() == "ischeckcode" && inputControl.Value.Trim().ToLower() == "true") { checkCode.isCheckCode = "true"; } if (inputControl.Name.Trim().ToLower() == "encrypterstring") { checkCode.encrypterString = inputControl.Value; } if (inputControl.Name.Trim().ToLower() == "sid") { checkCode.sid = inputControl.Value; } if (inputControl.Name.Trim().ToLower() == "gmtcreate") { checkCode.gmtCreate = inputControl.Value; } if (inputControl.Name.Trim().ToLower() == "checkcodeids") { checkCode.checkCodeIds = inputControl.Value; } } } } } }