ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wcymiss

[原创] 不懂html也来学网抓(xmlhttp/winhttp+fiddler)

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-28 10:30 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
renahu 发表于 2014-10-28 10:23
我也看见了,在response中有,这么说加和不加不影响最后效果了

我只能说在本例是这样。

TA的精华主题

TA的得分主题

发表于 2014-10-28 11:02 | 显示全部楼层
wcymiss 发表于 2014-10-21 21:55
获取数据-防盗链的处理-模拟Cookie:

再次提醒,抓包前请先清除浏览器所有Cookie、缓存、历史数据。

吴老师,是不是在模拟cookie的时候就不用加:.setRequestHeader "Content-Type"。。。。。了?

点评

我没有这样说过吧。  发表于 2014-10-28 11:38

TA的精华主题

TA的得分主题

发表于 2014-10-28 11:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wcymiss 发表于 2014-10-22 12:30
新手作业:

网站:http://weibo.com/guide/welcome

吴老师,能不能针对这段学习内容再布置另一个作业,不好意思,我没有微博,但想实战用一下模拟cookie

点评

自己找个需要登录的网站即可。  发表于 2014-10-28 11:39

TA的精华主题

TA的得分主题

发表于 2014-10-28 11:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
renahu 发表于 2014-10-28 11:02
吴老师,是不是在模拟cookie的时候就不用加:.setRequestHeader "Content-Type"。。。。。了?

但我看到例子中,这段已经没有了,是不是就不需要了呢?

点评

你可以自己测试呀!不加能得到数据的话就可以不加啊!  发表于 2014-10-28 12:11

TA的精华主题

TA的得分主题

发表于 2014-10-28 11:45 | 显示全部楼层
renahu 发表于 2014-10-28 11:02
吴老师,是不是在模拟cookie的时候就不用加:.setRequestHeader "Content-Type"。。。。。了?

但我看到例子中,这段已经没有了,是不是就不需要了呢?

TA的精华主题

TA的得分主题

发表于 2014-10-28 11:49 | 显示全部楼层
coby001 发表于 2014-10-27 10:47
在这个网页中,数据所在的table有唯一标识:id="Table1"

用这个特征,可以迅速找到数据。

Mark如附件:
今日在售银行产品.zip (667.61 KB, 下载次数: 114)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-28 11:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 wcymiss 于 2014-10-28 16:59 编辑

初识登录

登录其实没那么神秘。它也就是向服务器发送的一个POST请求。

我们来看一个简单的登录例子,以网易信箱(163.com)为例。

打开Fiddler,打开浏览器,登录网易信箱同时抓包。
搜索登录名vbatest(今天新注册的,你们可以随便整。哈哈):

登录0.png

前面有 图标-POST请求.png 标记的表明是POST请求。

163登录2.png

选择该session,点击Request框的Raw按钮通览一下所有发送内容:

163登录3.png

password竟然是明码,小小鄙视下网易。


再看Response框。哇,满满的Set-Cookie啊。最关键的里面有一句“LOGIN_SUCCESS”!!

163登录5.png

这样可以确定这个session是我们要找的登录session了!我们只要把它的Request的内容模拟好了就能成功登录(好期待)。

点击Request框的WebForms按钮通览发送的各参数:

163登录4.png

居然没有动态参数。。(乐坏了)

cookie、referer的先不忙测试。先copy抓包内容,写代码:
  1. Sub Main()
  2.     Const username As String = "vbatest"
  3.     Const password As String = "12341234"
  4.     Dim strText As String
  5.     Dim uid As String
  6.     uid = username & "@163.com"
  7.     With CreateObject("MSXML2.XMLHTTP")
  8.         .Open "POST", "https://mail.163.com/entry/cgi/ntesdoor?df=mail163_letter&funcid=loginone&iframe=1&passtype=1&product=mail163&race=63_31_31_gz&uid=" & username & "@163.com", False
  9.         .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  10.         .Send "savelogin=0&url2=http%3A%2F%2Fmail.163.com%2Ferrorpage%2Ferror163.htm&username=" & username & "&password=" & password & "&password="
  11.         strText = .getallresponseheaders
  12.         Debug.Print strText
  13.         strText = .responsetext
  14.         Debug.Print strText
  15.     End With
  16. End Sub
复制代码
立即窗口:

163登录6.png

登录成功!


小贴士:
1、不要以密码作为搜索内容。密码经常被加密。以密码原文作为搜索内容很可能搜不到所需session。
2、以登录名作为搜索内容相对好些。但也有可能被加密而搜不到正确的session。这时搜到的包含登录名的最早的session可能是登录后出现的页面。登录的session前面一般都有post的图标,可以根据这个再加上查看Request和Response的内容判断是否是我们所需的登录session。


===============
经过kangatang提醒,本例经过测试,将SendData的参数作为URL的参数用GET请求也可以实现登录,代码如下(原SendData的参数我精简了,只留了用户名和密码):
  1. Sub Main()
  2.     Const username As String = "vbatest"
  3.     Const password As String = "12341234"
  4.    
  5.     With CreateObject("MSXML2.XMLHTTP") 'CreateObject("WinHttp.WinHttpRequest.5.1") '
  6.         .Open "GET", "https://mail.163.com/entry/cgi/ntesdoor?df=mail163_letter&funcid=loginone&iframe=1&passtype=1&product=mail163&race=63_31_31_gz&uid=" & username & "@163.com&" & "username=" & username & "&password=" & password, False
  7.         .send
  8.         Debug.Print .Getallresponseheaders
  9.         Debug.Print .responsetext
  10.     End With
  11. End Sub
复制代码
但不是所有的网站都可以这样的。这只是个例。

TA的精华主题

TA的得分主题

发表于 2014-10-28 12:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wcymiss 发表于 2014-10-28 11:50
初识登录

登录其实没那么神秘。它也就是向服务器发送的一个POST请求。

老师 拜读了你的帖子很牛,我一直用ie控制方法,但是速度相对慢,我想请教就是 假如碰到有框架的内容 或者有链接跳转的  怎么把内容一次过采集下来?

点评

用了Fiddler你就不需考虑框架或是跳转了。  发表于 2014-10-28 12:27

TA的精华主题

TA的得分主题

发表于 2014-10-28 12:10 来自手机 | 显示全部楼层
wcymiss 发表于 2014-10-28 11:50
初识登录

登录其实没那么神秘。它也就是向服务器发送的一个POST请求。

如果玩邮箱的话 用SMTP/POP3等协议最合适。另外登录163邮箱把账号密码直接写在一条链接地址就能登录。FYI

点评

嗯,的确,SMTP/POP3的效率比web要好的多。临时没想到什么其他的登录简单同时又可以在里面随便发送数据的网站,就拿网易来凑合下罗。还请多提意见,谢谢啦。  发表于 2014-10-28 21:46
噢我理解错了,你是说把senddata写在url后面。。  发表于 2014-10-28 13:05
纳尼?我知道Open后面有第三第四参数是可以输入username和password的,但我从来都没指望哪个网站会支持这样的。。。  发表于 2014-10-28 12:16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-10-28 12:26 | 显示全部楼层
wcymiss 发表于 2014-10-22 15:30
获取数据-防盗链的处理-模拟User-Agent

很少遇到需要模拟User-Agent的网页。

关于“User-Agent”没太明白,既然是伪装手机在电脑上操作,是不是应该退出登录(因为您说手机可以在不登录的情况下查看所有会员的主题或回复)?可我退出登录后,点击任一用户名,系统提示你必须登录,如何是好?

点评

清除cookie、缓存、历史记录,退出浏览器。打开Fiddler设置agent后重新打开浏览器浏览excelhome网站。出现我帖子里的图样就ok了。  发表于 2014-10-28 12:32
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 12:35 , Processed in 0.046705 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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