ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-28 13:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:网页交互
我们公司有将资料库查询网页化,要查一个资料要输入很多查询范围,每选一个栏位资料就好像重写一个网页一样,然后再填写下一个,通常这种有没有可能写成(将全部栏位都填好)然后再查询?有没有要特别注意的地方?


点评

应该可以。你找到那个能Response所查资料的网页,模拟那个网页的所有Request。要了解各个查询范围对应的是哪个参数。  发表于 2014-10-28 14:27

TA的精华主题

TA的得分主题

发表于 2014-10-28 13:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liangdonghao222 发表于 2014-10-28 12:09
老师 拜读了你的帖子很牛,我一直用ie控制方法,但是速度相对慢,我想请教就是 假如碰到有框架的内容 或者 ...

老师,我尊重劳动  可否教我一次 我愿付酬劳!绝对没有鄙视的意思,只是我工作需要,十分感谢,如能可以的话  老师私信我告诉我qq  再次感谢

TA的精华主题

TA的得分主题

发表于 2014-10-28 13:56 | 显示全部楼层
wcymiss 发表于 2014-10-28 11:50
初识登录

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

老师,我尊重劳动  可否教我一次   我愿付酬劳!绝对没有鄙视的意思,只是我工作需要,十分感谢,如能可以的话  老师私信我告诉我qq  再次感谢

点评

你从开头一楼楼慢慢看下来你就会了。我能教的都在帖子里。  发表于 2014-10-28 14:30

TA的精华主题

TA的得分主题

发表于 2014-10-28 14:23 | 显示全部楼层
不错,下载收藏了,谢谢楼主

TA的精华主题

TA的得分主题

发表于 2014-10-28 14:46 | 显示全部楼层
wcymiss 发表于 2014-10-22 15:45
获取数据-防盗链的处理-其他发包头的模拟

其他发包头的模拟也比较少见。

吴老师,我看了模拟“x-requested-with”的网页,的确只要模拟“x-requested-with”就可以抓到数据,其他的什么referer,cookie都不用。
另外我发现他的request和response窗口中
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Type: application/json; charset=utf-8
上下窗口中Content-Type内容不一样,如果要往代码里写,用哪一个?

点评

当然是request。所有的发送都是按照request模拟。  发表于 2014-10-28 14:58

TA的精华主题

TA的得分主题

发表于 2014-10-28 14:56 | 显示全部楼层
wcymiss 发表于 2014-10-22 15:45
获取数据-防盗链的处理-其他发包头的模拟

其他发包头的模拟也比较少见。

另外,这个网页http://statementdog.com/analysis/tpe/8114#8114里的都是繁体字,在response中看不见繁体字,是不是都变成代码了?怎么把这些代码变回繁体字呢?是不是用什么函数呀?

TA的精华主题

TA的得分主题

发表于 2014-10-28 15:34 | 显示全部楼层
wcymiss 发表于 2014-10-22 16:45
获取数据-防盗链的处理-动态参数

相同方式操作网页,抓包能得到相同的参数值,这样的参数是静态的。反之 ...

这里提到“航班信息”中的动态参数 sn,这里不是可以完整地抓到数据吗,为什么还要像前面34楼的 cookie那样去抓呢?前面是因为cookie过期,才那样做,这个sn不存在这个问题吧?

点评

更正下,这个sn是根据查询条件综合计算得来。更改日期、或机场等等都会改变sn值。所以必须先获取服务器发来的sn值。  发表于 2014-10-28 16:09
sn每天都会变。这个sn是根据日期由服务器计算得来的。代码里日期变化sn不变的话就得不到数据。  发表于 2014-10-28 16:06

TA的精华主题

TA的得分主题

发表于 2014-10-28 16:11 | 显示全部楼层
wcymiss 发表于 2014-10-27 14:05
JSON转换成vba对象

1、JSON数组在vba内需要用For Each来获取其元素:2、JSON对象在vba内可直接用“对象. ...

我想将第2句代码等号右边的字符串用变量.responseText(.responseText的值与等号右边的字符串结构包括引号的单双完全一致)代替,结果后出错,请问老师如何套用此法将抓包得到的.responseText数转化为Table数据?

点评

不是仅仅修改第二行代码就可以整理json数据的。你还是要根据json数据里的对象、数组各自的特点来写代码分析。  发表于 2014-10-28 16:27

TA的精华主题

TA的得分主题

发表于 2014-10-28 16:17 | 显示全部楼层
renahu 发表于 2014-10-28 15:34
这里提到“航班信息”中的动态参数 sn,这里不是可以完整地抓到数据吗,为什么还要像前面34楼的 cookie那 ...

除了sn,日期,还有两个参数每天都变化(倒数2,3),即:e&image.x=37&image.y=11,不知道是什么东西,如果不变,不知道影响不影响获得数据,等晚上试一试

点评

这个可能是点击“查询”后出现的进度条的坐标位置。去掉应该也不影响。  发表于 2014-10-28 16:25

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-28 16:46 | 显示全部楼层
本帖最后由 wcymiss 于 2014-10-29 14:25 编辑

登录之后可以做什么----查询数据

登录并非是我们的最终目的。最终目的是查询一些非登录不能查看的数据,或是发送数据。如论坛登录后,可下载附件,可发帖;邮箱登录后,可收件发件。


前面讲过,xmlhttp和winhttp只要该对象不销毁,都可以保持cookie。我们登录就是为了取得一个被允许查看数据和发送数据的cookie,然后执行查询和发送的请求。

仍以网易邮箱为例:

登录后网页显示邮件列表,此过程抓包。

163登录1.png


抓包后,在fiddler内搜索邮件列表页面内的某字符串,查找到显示邮件列表的页面:(Response返回一串JSON数据)

邮件2.png


拷贝Request的相关内容,编写代码:
  1. Sub Main()
  2.     Const username As String = "vbatest"
  3.     Const password As String = "12341234"
  4.     Dim strText As String
  5.     Dim sid As String
  6.    
  7.     With CreateObject("MSXML2.XMLHTTP") 'CreateObject("WinHttp.WinHttpRequest.5.1") '
  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 "username=" & username & "&password=" & password
  11.         sid = Split(Split(.responsetext, "sid=")(1), "&")(0)
  12.         
  13.         .Open "POST", "http://mail.163.com/js6/s?sid=" & sid & "&func=mbox:listMessages&topNav_mobileIcon_show=1&TopTabReaderShow=1&TopTabReaderTipsShow=1&FrameMasterMailPopupClose=1&welcome_welcomemodule_mailrecom_click=1&LeftNavfolder1Click=1&mbox_folder_enter=1", False
  14.         .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
  15.         .setrequestheader "Accept", "text/javascript" '不加这句的话返回的不是json是xml数据
  16.         .send "var=" & encodeURI("<?xml version=""1.0""?>" _
  17.             & "<object>" _
  18.             & "<int name=""fid"">1</int>" _
  19.             & "<string name=""order"">date</string>" _
  20.             & "<boolean name=""desc"">true</boolean>" _
  21.             & "<int name=""limit"">20</int>" _
  22.             & "<int name=""start"">0</int>" _
  23.             & "<boolean name=""skipLockedFolders"">false</boolean>" _
  24.             & "<string name=""topFlag"">top</string>" _
  25.             & "<boolean name=""returnTag"">true</boolean>" _
  26.             & "<boolean name=""returnTotal"">true</boolean>" _
  27.             & "</object>")        Debug.Print .responsetext
  28.     End With
  29. End Sub
复制代码
查看邮件列表的SendData是一个xml数据。不管它什么数据,我们都照样copy就是了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 05:59 , Processed in 0.054814 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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