苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6136|回复: 5

[求助] 还是求个助吧,这个网站好像很难登录

[复制链接]
发表于 2013-11-1 22:34:16 | 显示全部楼层 |阅读模式
这几天尝试用httphelper登录这个网站:http://passport.artron.net/MemberCenter/RegLogin.php
真要搞死了,
我是这样弄的:
1.先get这个登录页面,获取cookie A,
2.用A获取验证码,显示到winform中,手动输入验证码、用户名和密码
3.用A post登录
4.post返回得到一个纯js脚本的页面,是个跳转url的一句话脚本,截取其中的url,get
5.返回得到一个更为复杂的脚本页面,脚本的大概是依次发出连接,登录网站、bbs、博客等等。截取登录网站的url,get,没有反应(我做到这一步,做不下去了)
捕获的数据,应该后面还有一到两步。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-11-2 18:04:41 | 显示全部楼层
为什么做不下去继续啊,这说明你的方法是正确的,可行的,继续肯定能出答案的
 楼主| 发表于 2013-11-2 20:42:58 | 显示全部楼层
本帖最后由 mouse_ding 于 2013-11-3 10:28 编辑

又弄了一天,早上进了一步,但是后来就不行了。求助啊。
网站的登录的详细步骤和代码:
[code=csharp]
private HttpHelper httpHelper = new HttpHelper();
private HttpResult result = new HttpResult();
string cookie;
string loginCookie;
[/code]
1.登录页面:
[code=csharp]        
url="http://passport.artron.net/MemberCenter/RegLogin.php"
result = httpHelper.GetHtml(new HttpItem { URL = url});
loginCookie = result.Cookie;
[/code]
2.获取验证码图片:
[code=csharp]
url="http://passport.artron.net/MemberCenter/code.php?"
result = httpHelper.GetHtml(new HttpItem
     {
          URL = Config.ValidCodeUrl + new Random().NextDouble(),
          Accept = "image/png",
          ResultType = ResultType.Byte,
          Cookie=loginCookie
     });
MemoryStream ms = new MemoryStream(result.ResultByte);
picCheckCode.Image = Image.FromStream(ms, true);
ms.Close();
[/code]
3.post登录(用户名、密码写死在代码里):
[code=csharp]
url="http://passport.artron.net/MemberCenter/RegLogin.php"
result = httpHelper.GetHtml(new HttpItem
{
       URL=url,
       Method="POST",
       ContentType="application/x-www-form-urlencoded",
       Postdata="UserName=%E4%B8%81%E6%9C%97&Pwd=yc85032808&CheckCode="+tbValidCode.Text.Trim()+"&IsPostBack=1&SourceAppId=2&login.php&IsRegLogin=&x=48&y=16",               
       Cookie=loginCookie
});
[/code]
4.获取登录返回结果(结果中只有一句脚本,发起了一个连接),截取其中的url,get:
[code=csharp]
url = new Regex(@"href=""(?<url>[^""]*)""").Match(result.Html).Groups["url"].Value;
result = httpHelper.GetHtml(new HttpItem
{
       URL = url,
       Cookie = loginCookie,
});
[/code]
5.再获取上面返回页面结果(是一个复杂的脚本,发起了三个连接,分别登录网站、论坛、博客),截取3个连接,分别get。2-4步均未产生其他cookie,故一直用loginCookie
[code=csharp]
mc = new Regex(@"(""Src""\s*:\s*""(?<url>[^""]*)"")").Matches(result.Html);
foreach (Match m in mc)
{
      url = m.Groups["url"].Value.Replace("\\", "") + "&num=" + (r.NextDouble() * 340 + 115).ToString();
      result = httpHelper.GetHtml(new HttpItem
      {
             URL = url,
             ContentType = "application/javascript",
             Cookie = loginCookie,
      });
      if (result.Cookie != null)
             cookie += "," + result.Cookie;
}
[/code]
        这一步中三个访问得到的cookie,连接起来放到了cookie变量里,不知这样操作对不对。
6.第五步的前两个页面没有返回结果,得到了相应的cookie;最后一个网页返回得到脚本,脚本中再次发起四个连接,分别截取url,get:
[code=csharp]
mc = new Regex(@"(.src\s*=\s*""(?<url>[^""]*)"")").Matches(result.Html);
foreach (Match m in mc)
{
       url = m.Groups["url"].Value;
       result = httpHelper.GetHtml(new HttpItem
       {
             URL = url,
             ContentType = "application/javascript",
             Cookie = loginCookie,
      });
      if (result.Cookie != null )
             cookie += "," + result.Cookie;
}
cookie = cookie.Substring(1);
[/code]
7. 进入用户中心之前的跳转页。第6步得到了一些cookie再次连接到了cookie里。同时,第6步的其中一个网页返回的仍然是脚本,发起连接,而且还会进一步再得到脚本发起连接,测试后发现貌似不需要再继续下去了,可以进入到用户中心之前的跳转页了。
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
         URL = "http://passport.artron.net/MemberCenter/Location.php?TransferUrl=http://passport.artron.net/MemberCenter/index.php",
          Cookie = loginCookie,
});
8.进入用户中心
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
        URL = "http://passport.artron.net/MemberCenter/index.php",
       Cookie = loginCookie,
});
[/code]
        得到的结果已经进入到了用户中心,显示了用户名、欢迎词等。说明登录成功。
9.进入网站相关页面,检查是否可以查看登录用户可见的数据
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
      URL = "http://auction.artron.net/result/pmp-0137-0-0-2-0-0-1/",
      Cookie = cookie,
});
[/code]
      得到的结果是,登录用户可见数据仍然不可见,显示“登录后可查看”。将此处的cookie换成loginCookie,结果一样。换成cookie连接上loginCookie,结果也一样。
10. 一个测试是否登录的页面。网站的头部显示用户信息的部分是个ajax请求的页面,直接访问该页面,登录后会显示用户信息,否则显示登录表单。
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
       URL = "http://www.artron.net/member/login.php",
       Cookie = cookie,
});
[/code]
      结果是登录表单。同样,cookie换成loginCookie还是cookie连接上loginCookie都一样。


请教哪里出问题了。这个网站的登录还真烦。
发表于 2013-11-2 23:55:25 | 显示全部楼层
mouse_ding 发表于 2013-11-2 20:42
又弄了一天,早上进了一步,但是后来就不行了。求助啊。
网站的登录的详细步骤和代码:
        private  ...

到哪一步算是成功呢?
 楼主| 发表于 2013-11-3 09:51:29 | 显示全部楼层
本帖最后由 mouse_ding 于 2013-11-3 09:55 编辑

第8步已经做到了。第9步和第10步都是检验有没有真正登录的,没有做到
发表于 2013-11-4 09:51:46 | 显示全部楼层
你的Cookie没有自动管理吗?
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-23 14:09

© 2014-2021

快速回复 返回顶部 返回列表