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-12-9 22:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:网页交互
谢谢,辛苦了

TA的精华主题

TA的得分主题

发表于 2014-12-10 16:52 | 显示全部楼层
wcymiss 发表于 2014-10-23 23:16
晚上正在找重定向的例子进行测试的时候,发现了我电脑winhttp控件居然有个bug。

我的winhttp对于301重 ...

如图,winhttp怎么也有缓存?
0185.jpg
0186.jpg

TA的精华主题

TA的得分主题

发表于 2014-12-10 18:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 a4569874 于 2014-12-10 18:35 编辑
wcymiss 发表于 2014-10-23 23:16
晚上正在找重定向的例子进行测试的时候,发现了我电脑winhttp控件居然有个bug。

我的winhttp对于301重 ...

winhttp也有缓存,取出的Cookie值缺省了"JSESSIONID=" ,实际上把缓存的Cookie值与取出的Cookie值作为了模拟Cookie一起提交了,
试了下,发现下面代码好像可以不调用缓存,
  1. Sub Main()
  2.     Dim strText As String
  3.     Dim strCookie As String
  4.     Dim XmlHttp As Object
  5.     With CreateObject("WinHttp.WinHttpRequest.5.1")
  6.         .Option(6) = False ' 禁止重定向,以获取原网页信息
  7.         .Open "GET", "http://www.gzgczj.com:8080/costRegulatory/user.do?method=changeIndex&fareaId=1", False
  8.         .Send
  9.         strText = .getAllResponseHeaders '获取所有的回应头信息
  10.         Debug.Print strText
  11.         strCookie = Split(Split(strText, "Set-Cookie: ")(1), ";")(0) '取出Cookie值
  12.         
  13.         Set XmlHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  14.         XmlHttp.Open "GET", "http://www.gzgczj.com:8080/costRegulatory/project.do?method=showProjectList&isVisitor=1&f_id=11011&t1413902083242", False
  15.         XmlHttp.setRequestHeader "Referer", "http://www.gzgczj.com:8080/costRegulatory/user.do?method=changeIndex&fareaId=1"
  16.         XmlHttp.setRequestHeader "Cookie", strCookie '模拟Cookie
  17.         XmlHttp.Send
  18.         strText = XmlHttp.responsetext
  19.         Debug.Print strText
  20.         
  21.      End With
  22. End Sub
复制代码

点评

你说得对,我那段代码起作用的不是我设置cookie的那句,仍然是winhttp里缓存的cookie在发挥作用。我应该分两个winhttp对象来写。我取cookie的语句也写错了。应该splt(...,"Set-Cookie:")  发表于 2014-12-11 09:14

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-10 19:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好文章呀。收藏

TA的精华主题

TA的得分主题

发表于 2014-12-11 12:27 | 显示全部楼层
吴姐回复的帖子
主题;回帖;看帖
  1. Sub wcymiss()
  2.     Dim htm As New WinHttpRequest, str As String
  3.     Dim reg As New RegExp
  4.     Dim ar, arr, i, j, m, n

  5.     With htm
  6.         .Open "GET", "http://club.excelhome.net/home.php?mod=space&uid=218917&do=thread&view=me&type=reply&from=space&mobile=yes", False
  7.         .SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible: MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; SAMSUNG; SGH-i917)"
  8.         .Send
  9.         str = .ResponseText
  10.         Debug.Print str
  11.         With reg
  12.             .Global = True
  13.             .MultiLine = True
  14.             .Pattern = "\s"
  15.             str = .Replace(str, "")
  16.             .Pattern = "xs1"">(.*?)<.*?回(.*?)&nbsp;&nbsp;看(.*?)<"
  17.             Set ar = .Execute(str)
  18.         End With
  19.     End With
  20.     ReDim arr(0 To ar.Count - 1, 2)
  21.     For i = 0 To ar.Count - 1
  22.             For j = 0 To 2
  23.             arr(i, j) = ar.Item(i).SubMatches(j)
  24.             Next
  25.     Next
  26.     Sheet2.Cells(3, 1).Resize(65533, 4).ClearContents
  27.     n = Sheet2.Range("a65533").End(xlUp).Row
  28.     Sheet2.Cells(n + 1, 1).Resize(ar.Count - 1, 3) = arr
  29. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-11 15:09 | 显示全部楼层
航空公司的代码:导入表格借用vba万岁的代码,非常受益!!
  1. Sub hk()
  2.     Dim xml As New WinHttpRequest, str As String, reg As New RegExp, xml1 As String, html
  3.     Dim i, j, m, n
  4.     Dim ar, arr
  5.     Dim tb
  6.     xml1 = "http://webflight.linkosky.com"
  7.     With xml
  8.         .Open "GET", xml1 & "/WEB/Flight/WaitingSearch.aspx?JT=1&OC=PEK&DC=SHA&dstDesp=GUANGZHOU%B9%E3%D6%DD&dst2=CAN&DD=2014-12-11&DT=7&BD=&BT=7&AL=ALL&DR=true&image.x=39&image.y=11", False
  9.         .SetRequestHeader "Referer", " http://www.caac.gov.cn/S1/GNCX/"
  10.         .Send
  11.         str = .ResponseText
  12.         Debug.Print str
  13.         With reg
  14.             .Global = True
  15.             .MultiLine = True
  16.             .Pattern = "ace\('(.*?)'"
  17.             str = .Execute(str).Item(0).SubMatches(0)
  18.             Debug.Print str
  19.         End With
  20.         Set html = CreateObject("htmlfile")
  21.         .Open "GET", xml1 & str, False
  22.         .Send
  23.         html.body.innerhtml = .ResponseText
  24.         Set tb = html.all.tags("div")
  25.         For i = 0 To tb.Length - 1
  26.             If tb(i).classname = "menu_layout2" Or tb(i).classname = "listone_layout" Or tb(i).classname = "listtwo_layout" Or tb(i).classname = "menu_content_small2" Then
  27.                 n = n + 1
  28.                 For j = 0 To tb(i).ChildNodes.Length - 1
  29.                     Sheet3.Cells(n, j + 1) = tb(i).ChildNodes(j).innertext
  30.                 Next
  31.             End If
  32.         Next
  33.     End With
  34. End Sub
复制代码

点评

呵呵!我好像也是借用onlycxb大侠的代码。  发表于 2014-12-12 17:15

TA的精华主题

TA的得分主题

发表于 2014-12-11 18:36 | 显示全部楼层
wcymiss 发表于 2014-12-6 20:44
对https了解还不多,不敢妄言。

但,对于这个网页,我用vba代码登录,username和password是明明白白 ...

吴老师,那个163简单登录session终于找到了,今天excel出了故障,我不得不把系统整个更新了,新装了fiddler4(原来是2),看来是版本问题

TA的精华主题

TA的得分主题

发表于 2014-12-11 19:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
奇文共赏,标记好,有空多看看,太适合入门了,谢谢吴姐

TA的精华主题

TA的得分主题

发表于 2014-12-11 19:57 | 显示全部楼层
本帖最后由 renahu 于 2014-12-12 17:27 编辑
wcymiss 发表于 2014-10-28 11:50
初识登录

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


老师,我怎么实现用编写的代码登录一个网站后,当打开那个网站,就能看到我已经登录的标记,比如我的名字?我昨天,登录了一个网站,用xmlhttp 登录成功后,网页可以同步反映出我已经登录,而用winhttp成功登录后,则在网页里没有同步反映我已经登录。今天重做系统后,fiddler2改成fiddler4,现在再登录这个网站,两种方法登录成功后,网页都不能同步反映,这怎么回事?

后来用360进行修复清理后,又和恢复系统前一样了,就是用xmlhttp 登录可以同步网页上反映出来,用winhttp成功登录网页上反映不出来,不过发帖都可以了,不过我发现用winhttp时,发帖要模拟一下cookie(呵呵,从搜房网那节课学到的)

TA的精华主题

TA的得分主题

发表于 2014-12-11 20:20 | 显示全部楼层
好东西,顶了,留记号学习。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 22:28 , Processed in 0.038096 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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