c#模拟浏览器注册新浪邮箱账号 验证码 错误

.Net技术 码拜 10年前 (2014-12-01) 1829次浏览 0个评论

目前已经做到注册提交账号了,出现了问题,代码如下

string result = null;
txtLog.WriteLog(“开始注册”);
string email = “ipx5gjynbnwc5q@163.com”;// getEmail();
string password = Util.CreateRandomCode(6);
if (string.IsNullOrEmpty(email))
{
txtLog.WriteLog(“缺少邮箱账号”);
}
else
{
WebClient.Encoding = Encoding.GetEncoding(936);
WebClient.Referer = “http://login.sina.com.cn/signup/”;
WebClient.Host = “login.sina.com.cn”;
result = WebClient.DownloadString(“http://login.sina.com.cn/signup/signupmail.php”);
WebClient.DownloadData(“https://login.sina.com.cn/images/signup/showcolor.png”);
MatchCollection matches = Regex.Matches(result, @”([\d\w]{32}|referer|entry|src|type|regtime)””:””(.*?)”””, RegexOptions.IgnoreCase);
txtLog.WriteLog(“识别验证码”);
WebClient.Referer = “https://login.sina.com.cn/signup/signup”;
WebClient.Headers[“host”] = “login.sina.com.cn”;
//下面是识别验证码
string door =   Util.RecogniteValidateImage(WebClient.OpenRead(“https://login.sina.com.cn/cgi/pin.php?r=” + Util.GetTimeStamp() + “&lang=zh&type=hollow”), picValidate, getValidateCode);
IDictionary<string, string> data = new Dictionary<string, string>();
while (true)
{
if (checkUserName(email)) break;//判断邮箱是否可用
email = getEmail();
if (string.IsNullOrEmpty(email))
{
txtLog.WriteLog(“缺少邮箱账号”);
break;
}
}
if (!string.IsNullOrEmpty(email))
{
data.Clear();
data.Add(“othermail”, email);
data.Add(“password”, password);
data.Add(“door”, door);
data.Add(“arg”, “”);
data.Add(“hobbies[]”, “23”);
data.Add(“mailType”, “sina.cn”);
data.Add(“regtype”, “othermail”);
data.Add(“username”, “”);
foreach (Match salt in matches)
{
data.Add(salt.Groups[1].Value, salt.Groups[2].Value);
}
if (!data.ContainsKey(“r”))
data.Add(“r”, “”);
WebClient.XMLHttpRequest();
WebClient.Referer = “https://login.sina.com.cn/signup/signup”;
WebClient.Host = “login.sina.com.cn”;
result = WebClient.UploadData(“https://login.sina.com.cn/signup/signupflow”, data);
i++;
}
} result = WebClient.UploadData(“https://login.sina.com.cn/signup/signupflow”, data);这一句,如果输入一个错误的验证码,那么这句会返回“ 验证码 错误”,奇怪的是输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事?
—-
40分 引用 楼主 z1101385391 的回复:目前已经做到注册提交账号了,出现了问题,代码如下string result = null;
txtLog.WriteLog(“开始注册”);
string email = “ipx5gjynbnwc5q@163.com”;// getEmail();
string password = Util.CreateRandomCode(6);
if (string.IsNullOrEmpty(email))
{
txtLog.WriteLog(“缺少邮箱账号”);
}
else
{
WebClient.Encoding = Encoding.GetEncoding(936);
WebClient.Referer = “http://login.sina.com.cn/signup/”;
WebClient.Host = “login.sina.com.cn”;
result = WebClient.DownloadString(“http://login.sina.com.cn/signup/signupmail.php”);
WebClient.DownloadData(“https://login.sina.com.cn/images/signup/showcolor.png”);
MatchCollection matches = Regex.Matches(result, @”([\d\w]{32}|referer|entry|src|type|regtime)””:””(.*?)”””, RegexOptions.IgnoreCase);
txtLog.WriteLog(“识别验证码”);
WebClient.Referer = “https://login.sina.com.cn/signup/signup”;
WebClient.Headers[“host”] = “login.sina.com.cn”;
//下面是识别验证码
string door =   Util.RecogniteValidateImage(WebClient.OpenRead(“https://login.sina.com.cn/cgi/pin.php?r=” + Util.GetTimeStamp() + “&lang=zh&type=hollow”), picValidate, getValidateCode);
IDictionary<string, string> data = new Dictionary<string, string>();
while (true)
{
if (checkUserName(email)) break;//判断邮箱是否可用
email = getEmail();
if (string.IsNullOrEmpty(email))
{
txtLog.WriteLog(“缺少邮箱账号”);
break;
}
}
if (!string.IsNullOrEmpty(email))
{
data.Clear();
data.Add(“othermail”, email);
data.Add(“password”, password);
data.Add(“door”, door);
data.Add(“arg”, “”);
data.Add(“hobbies[]”, “23”);
data.Add(“mailType”, “sina.cn”);
data.Add(“regtype”, “othermail”);
data.Add(“username”, “”);
foreach (Match salt in matches)
{
data.Add(salt.Groups[1].Value, salt.Groups[2].Value);
}
if (!data.ContainsKey(“r”))
data.Add(“r”, “”);
WebClient.XMLHttpRequest();
WebClient.Referer = “https://login.sina.com.cn/signup/signup”;
WebClient.Host = “login.sina.com.cn”;
result = WebClient.UploadData(“https://login.sina.com.cn/signup/signupflow”, data);
i++;
}
} result = WebClient.UploadData(“https://login.sina.com.cn/signup/signupflow”, data);
这一句,如果输入一个错误的验证码,那么这句会返回“验证码错误”,奇怪的是输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事?上个帖子想回复的无赖验证码识别我还做不出来    其实你去申请个帐号就知道了 是新浪注册的问题  你输入正确信息后还要重新输入验证码
—-
实在不行就用webbrowser呗
—-
呃“楼上两位,那个验证码识别是弹出来识别和由平台识别的““官方没问题的,官方有问题的话我就不做了
—-
引用 3 楼 zhuankeshumo 的回复:实在不行就用webbrowser呗webbrowser判断文档加载完成好麻烦““DocumentCompleted事件只是其中一部分加载完成了,不是全部而且这个控件也比较慢
—-
引用 5 楼 z1101385391 的回复:Quote: 引用 3 楼 zhuankeshumo 的回复:
实在不行就用webbrowser呗
webbrowser判断文档加载完成好麻烦““
DocumentCompleted事件只是其中一部分加载完成了,不是全部
而且这个控件也比较慢你去申请个帐号试试就知道了 第一遍表单填写正确提交 它就会离奇的跳出重新输入验证码的提示
—-
引用 6 楼 zhuankeshumo 的回复:Quote: 引用 5 楼 z1101385391 的回复:
Quote: 引用 3 楼 zhuankeshumo 的回复:
实在不行就用webbrowser呗
webbrowser判断文档加载完成好麻烦““
DocumentCompleted事件只是其中一部分加载完成了,不是全部
而且这个控件也比较慢你去申请个帐号试试就知道了 第一遍表单填写正确提交 它就会离奇的跳出重新输入验证码的提示我今天一直在试呀“`没这问题呀,只是偶尔出这问题后来我用IE把

foreach (Match salt in matches)
{
data.Add(salt.Groups[1].Value, salt.Groups[2].Value);
}

这段代码实现的数据给清空了,看起来应该是盐值,浏览器就果断报“请重新验证验证码”的错了
—-
输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事 你手动申请也会出现这个问题  刚刚在你之前那个帖子时候我试了
—-
引用 8 楼 zhuankeshumo 的回复:输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事 你手动申请也会出现这个问题  刚刚在你之前那个帖子时候我试了真会出?我今天试了一天了没出呀““再去试试“`
—-
估计是防止别人恶意申请的   牺牲用户体验
—-
引用 11 楼 zhuankeshumo 的回复:估计是防止别人恶意申请的   牺牲用户体验还真是“`刚刚试了,不过也只是第一次而已,第二次就不会这样了,这样的话“`有办法了“`
—-
引用 11 楼 zhuankeshumo 的回复:估计是防止别人恶意申请的   牺牲用户体验我清空了cookies,发现又正常了,这网站真有问题
—-
引用 4 楼 z1101385391 的回复:呃“楼上两位,那个验证码识别是弹出来识别和由平台识别的““
官方没问题的,官方有问题的话我就不做了哪个平台?
—-
引用 15 楼 zhuankeshumo 的回复:Quote: 引用 4 楼 z1101385391 的回复:
呃“楼上两位,那个验证码识别是弹出来识别和由平台识别的““
官方没问题的,官方有问题的话我就不做了哪个平台?打码兔
—-
result = WebClient.UploadData(“https://login.sina.com.cn/signup/signupflow”, data);我这里,data要求是byte[]数组啊
—-
我这里报:{“retcode”:-8023,”msg”:[“”,””,””,””,”请先完成验证”]}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c#模拟浏览器注册新浪邮箱账号 验证码 错误
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!