C#实现淘宝登录


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


背景

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

功能实现

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

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

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 把淘宝登录页定位到 二维码的位置。

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

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;
        }

总结

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

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值