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;
}
总结
其实这套方法不仅适用于淘宝,绝大部分网站的登录状态都可以模拟。
上一篇: pycharm 使用心得(六)进行简单的数据库管理
下一篇: win10开机没有切换用户名