欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#实现淘宝登录

程序员文章站 2022-05-06 13:26:54
...

title: C#实现淘宝登录
tags: c#
author : Clown95


背景

前一段时间公司某个项目需要监控淘宝订单,这就涉及到模拟淘宝登录的问题。今天我就给大家分享下我的实现方式。

C#实现淘宝登录

功能实现

1.首先我们需要添加 WebBrowser 控件 ,然后把Url属性的值设置为淘宝登录页面

https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F%3Fspm%3Da2107.1.1000340.1.3e3e11d9Kzp0qi

C#实现淘宝登录

2.一般比较正规的网站都具有反爬虫机制,首先判断的就是UserAgent,淘宝当然不例外,所以需要我们为WebBrowser 控件设置 UserAgent 。

为了方便演示,我直接把代码添加到 Form的构造函数中,完成UserAgent的初始化:

        /// <summary>
        /// 设置UserAgent
        /// </summary>
        [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
        private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
		
        public Form1()
        {
            string pBuffer = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"; 
            UrlMkSetSessionOption(0x10000001, pBuffer, pBuffer.Length, 0); 			//设置UserAgent
            webBrowser1.ScriptErrorsSuppressed = true; //禁用错误脚本提示   
       
        }

3.接下来就是最重要的一步了,获取淘宝登录状态,我们知道当我们登录账号的时候,浏览器一般会默认的帮我们记住登录状态,这个状态就是通过Cookie保存的。因此下面我们需要获取到淘宝登录成功的状态,并且保存在Cookie中。

        /// <summary>
        /// 自动登录淘宝
        /// </summary>
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

            if (e.Url.ToString().Contains("login"))
            {
                webBrowser1.Document.Window.ScrollTo(872, 290); // 定位网页显示位置
            }
            else if (webBrowser1.Url.ToString().Contains("https://www.taobao.com"))
            {
                string Cookie = UtilsHelper.GetStrCookieing(webBrowser1.Url.ToString());
                strCookie = Cookie;
                textLogs.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " : 淘宝账号登录成功\r\n");   //这个是输出日志 使用的是TextBox 控件
            }
        }

通过上面代码可以看到,我先检测 WebBrowser 的地址是否包含login字段,如果包含说明淘宝账号还未登录 ,然后使用 ScrollTo 把淘宝登录页定位到 二维码的位置。

C#实现淘宝登录

如检测到 WebBrowser 的地址包含https://www.taobao.com 说明账号已经登录成功,那么我们就需要获取到 这个WebBrowser 的 Cookie 并把它保存下来。

C#实现淘宝登录

4.我们已经获取到登录状态的Cookie了,接下来我们就可以为所欲为了。

下面贴上我检测订单是否正确的代码 ,主要通过判断订单页面中的手机号码是否和我填写的号码一致。

        /// <summary>
        /// 检测订单号 
        /// </summary>
		/// <param name="orderId">传入订单号</param>
		/// <param name="strCookie">传入Cookie值</param>
		/// <returns>返回页面的Html</returns>
 public string CheeckOrderId(string orderId, string strCookie)
        {

            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "https://trade.taobao.com/trade/detail/e_ticket_trade_item_detail.htm?spm=a1z09.1.0.0.60663606LKpQP4&bizOrderId=" + orderId,//URL     必需项    

                Encoding = System.Text.Encoding.GetEncoding("gbk"),//URL     可选项 默认为Get   
                Method = "get",//URL     可选项 默认为Get   
                IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写   
                Cookie = strCookie,
                Referer = "",//来源URL     可选项   
                Postdata = "",//Post数据     可选项GET时不需要写   
                Timeout = 100000,//连接超时时间     可选项默认为100000    
                ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000   
                                         // UserAgent = "Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; FRD-AL00 Build/HUAWEIFRD-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.3.8.909 UWS/2.10.2.5 Mobile Safari/537.36 UCBS/2.10.2.5 Nebula AlipayDefined(nt:WIFI,ws:360|0|3.0) AliApp(AP/10.0.18.062203) AlipayClient/10.0.18.062203 Language/zh-Hans useStatusBar/true",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36",
                ContentType = "text/html; charset=utf-8",//返回类型    可选项有默认值   
                Allowautoredirect = false,//是否根据301跳转     可选项   

                ProxyIp = "",//代理服务器ID     可选项 不需要代理 时可以不设置这三个参数    
                             //ProxyPwd = "123456",//代理服务器密码     可选项    
                             //ProxyUserName = "administrator",//代理服务器账户名     可选项   
                ResultType = ResultType.String
            };
            HttpResult result = http.GetHtml(item);
            return result.Html;
        }

总结

其实这套方法不仅适用于淘宝,绝大部分网站的登录状态都可以模拟。