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-23 18:32 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
VBA万岁 发表于 2014-10-23 17:22
将'On Error Resume Next
前面的逗号去掉看看。

这回倒是不报错了,但什么数据都没有,我这是2010, 对了,执行后自动用360浏览器打开了银行网页

TA的精华主题

TA的得分主题

发表于 2014-10-23 20:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wcymiss 发表于 2014-10-23 09:53
之前提过,QQ软件也可以用Fiddler抓包。
我们来抓抓群成员的清单。
1、打开fiddler,打开群聊天窗口,“群 ...

之前不知道fidder,为了取群成员数据我还用IE法跑到群空间去抓的,绕了好大一个圈。。。

TA的精华主题

TA的得分主题

发表于 2014-10-23 20:55 | 显示全部楼层
有了这个帖子新学网抓的朋友们有福了,好多东西靠自己摸索还不知道要多久

TA的精华主题

TA的得分主题

发表于 2014-10-23 21:14 | 显示全部楼层
本帖最后由 renahu 于 2014-10-25 18:42 编辑
VBA万岁 发表于 2014-10-21 17:14
正需要这个,多谢分享!


想问一下,你的那个 Sub 作业1_2_获取航班信息数据() 中
arr = Split(St, "<div class=""menu_layout2"">")   
数组元素怎么有52个? 我在RawFile文件中搜索怎么只有6个  <div class="menu_layout2">  ?

明白了,日期不一样,所以信息不一样

TA的精华主题

TA的得分主题

发表于 2014-10-23 22:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
blanksoul12 发表于 2014-10-23 17:49
在34樓第三點時,運行到 Debug.Print strText 這句後看即時窗時,只發現
Date: Thu, 23 Oct 2014 09:41: ...

我直接COPY妳那個程序出來的

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-23 23:16 | 显示全部楼层
本帖最后由 wcymiss 于 2014-10-24 07:00 编辑
blanksoul12 发表于 2014-10-23 22:56
我直接COPY妳那個程序出來的

晚上正在找重定向的例子进行测试的时候,发现了我电脑winhttp控件居然有个bug。

我的winhttp对于301重定向的网页运行正常,对于302重定向的网页,不管option(6)怎么设置,都不会重定向到新的网页。汗!!

34楼的这个网页,正好是一个302重定向的网页,所以我的winhttp没有进行重定向,返回的信息是原网页的。我还以为option(6)默认是false,测试了才发现默认是true

正确的代码应该还要加一句“.option(6)=false
  1. Sub Main()
  2.     Dim strText As String
  3.     Dim strCookie As String
  4.     With CreateObject("WinHttp.WinHttpRequest.5.1")
  5.         .Option(6) = False ' 禁止重定向,以获取原网页信息
  6.         .Open "GET", "http://www.gzgczj.com:8080/costRegulatory/user.do?method=changeIndex&fareaId=1", False
  7.         .Send
  8.         strText = .getAllResponseHeaders '获取所有的回应头信息
  9.         Debug.Print strText
  10.         strCookie = Split(Split(strText, "JSESSIONID=")(1), ";")(0) '取出Cookie值
  11.         
  12.         .Open "GET", "http://www.gzgczj.com:8080/costRegulatory/project.do?method=showProjectList&isVisitor=1&f_id=11011&t1413902083242", False
  13.         .setRequestHeader "Referer", "http://www.gzgczj.com:8080/costRegulatory/user.do?method=changeIndex&fareaId=1"
  14.         .setRequestHeader "Cookie", strCookie '模拟Cookie
  15.         .Send
  16.         strText = .responsetext
  17.         Debug.Print strText
  18.         
  19.     End With
  20. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-10-23 23:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
.option(6)=false
可否講解一下什麼叫重定向呢

点评

108楼大致说了下重定向方面的事。  发表于 2014-10-24 00:01

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-23 23:55 | 显示全部楼层
本帖最后由 wcymiss 于 2014-10-30 10:05 编辑

重定向

重定向用到的不多,可以稍微了解一下。
你向服务器申请访问地址A,服务器回应你,给你一个新地址B,让你访问它,这就是重定向。(具体请百度)
34楼的例子就是一个重定向的例子。
重定向.png

xmlhttp会自动重定向到B地址,发送B地址的请求。
winhttp有参数可以设置是否重定向:
.Option(6)=false'禁止重定向
.Option(6)=true'允许重定向,默认设置

需要获取重定向之前网页信息的时候,就需要用winhttp设置Option(6)=false来获取了。
比如获取原网页的Cookie。可以参考106楼的代码。

题外话:
发现我电脑有bug:
对于301重定向网页,xmlhttp访问出错,winhttp正常,设置option(6)有效;
对于302重定向网页,xmlhttp可以正常重定向,winhttp不管怎么设置option(6)都无法进行重定向,返回的一直都是原网页信息。
34楼的例子是302重定向。
301重定向例子:http://widget.wumii.com/ext/relatedItemsWidget.htm
我重新下载了一个winhttp.dll也无效。估计是window问题。改天有空重新找个版本GHO

======================================================
经过大师xmyjk的提醒,xmlhttp访问301重定向网页出错的原因是Internet禁止了通过域访问数据源。
Iinternet选项----安全----Internet----自定义级别----其他----通过域访问数据源,选择“启用”即可。


TA的精华主题

TA的得分主题

发表于 2014-10-24 07:36 | 显示全部楼层
本帖最后由 liucqa 于 2014-10-24 07:45 编辑
wcymiss 发表于 2014-10-23 23:16
晚上正在找重定向的例子进行测试的时候,发现了我电脑winhttp控件居然有个bug。

我的winhttp对于301重 ...

如果获得的Cookie不需要再加工的话,后继的提交可以不带Cookie,Winhttp会自己带着之前获得的Cookie提交的。

你可以试试屏蔽 .setRequestHeader "Cookie", strCookie

一般情况下,我们说需要伪造Cookie,是因为我们想发送一个服务器没有提供给我们的cookie,以便伪造身份欺骗服务器。直接获得服务器的Cookie并不做加工的再次提交,很多情况下是不需要的。

你可以多找些网站测试,看看不同网站对Cookie的反应。

***********************************************************************


另外,在做网页交互的时候,不要轻易相信别人写的代码,如果能抱着怀疑一切的态度来测试别人提供的代码的话,你会发现论坛好多好多网页交互的代码和教程都是有错误的,包括我写的教程,呵呵

希望你的教程能早日完工,造福会员,谢谢!


点评

34楼就是后继提交不带Cookie的例子。特地拿它做这方面的典型的。第3步代码仅仅是个过渡。  发表于 2014-10-24 09:20

TA的精华主题

TA的得分主题

发表于 2014-10-24 08:33 | 显示全部楼层
本帖最后由 VBA万岁 于 2014-10-24 08:40 编辑
renahu 发表于 2014-10-23 21:14
想问一下,你的那个 Sub 作业1_2_获取航班信息数据() 中
arr = Split(St, "")   
数组元素怎么有52个? ...


这个我也没细看——代码是在别人的,只是在我这里测试通过。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 01:09 , Processed in 0.037995 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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