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-23 20:16 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
wcymiss 发表于 2014-12-23 12:19
这个应该不难啊。准确发送__VIEWSTATE和__EVENTVALIDATION应该就可以啊(每次请求都要发送从上一次的resp ...

谢谢 吴姐百忙中帮忙解答,请帮忙指正。
转码代码如下
Public Function UTF8ToGB2312(ByVal varIn As Variant) As String
    Dim bytesData() As Byte
    Dim adoStream As Object
    bytesData = varIn
    Set adoStream = CreateObject("ADODB.Stream")
    adoStream.Charset = "utf-8"
    adoStream.Type = 1 'adTypeBinary
    adoStream.Open
    adoStream.Write bytesData
    adoStream.Position = 0
    adoStream.Type = 2 'adTypeText
    UTF8ToGB2312 = adoStream.ReadText()
    adoStream.Close
End Function

思路为通过vba发送用户登陆信息,获取用户Set-Cookie (不知Cookie 存活时间,取新鲜的觉的靠谱)因为登陆后需要发送 用户Set-Cookie

测试代码
   Dim strText As String
    Dim strCookie As String
    Dim strDlistUser As String
    Dim strDLname As String
    Dim strtxtPassword As String
   
    strDlistUser = "**"
    strDLname = "**"
    strtxtPassword = "***"
    With CreateObject("WinHttp.WinHttpRequest.5.1")
   
        '第一次GET,获取VIEWSTATE和EVENTVALIDATION
        .Open "GET", "主页/login.aspx", False'初始用户信息
     .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send
        strText = .responsetext
        VIEWSTATE = encodeURI(CStr(Split(Split(strText, "__VIEWSTATE"" value=""")(1), """ />")(0)))
        EVENTVALIDATION = encodeURI(CStr(Split(Split(strText, "__EVENTVALIDATION"" value=""")(1), """ />")(0)))
        
        '第二次POST,获取指用户的VIEWSTATE和EVENTVALIDATION
        .Open "POST", "主页/login.aspx, False"
        .setRequestHeader "Content-Type", "主页/login.aspx"
        .Send "__LASTFOCUS=&__EVENTTARGET=btnLogin&__EVENTARGUMENT=&__VIEWSTATE="    & VIEWSTATE _
            & "&DlistUser=" & strDlistUser _
            & "&DLname= " & strDLname _
            & "&txtPassword=" & strtxtPassword _
            & "&__EVENTVALIDATION=" & EVENTVALIDATION
        strText = .responsetext
        VIEWSTATE = encodeURI(CStr(Split(Split(strText, "__VIEWSTATE"" value=""")(1), """ />")(0)))
        EVENTVALIDATION = encodeURI(CStr(Split(Split(strText, "__EVENTVALIDATION"" value=""")(1), """ />")(0)))
   
        strText = .responsetext
        Debug.Print strText
        
    End With

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-24 15:03 | 显示全部楼层
zss427607 发表于 2014-12-23 20:16
谢谢 吴姐百忙中帮忙解答,请帮忙指正。
转码代码如下
Public Function UTF8ToGB2312(ByVal varIn As V ...

1、UTF8ToGB2312这个函数你根本没用上,事实上,仅仅登录,不提取数据的话也不需要用这个函数。
2、第二次post里的Content-Type后面的内容错误。
3、strDistUser和strDLname假如是中文的话都需要用encodeURI函数转码。
4、第一次GET,应该不需要设置Content-Type。
另外,split的结果的元素本身就是文本,不需要用CStr转文本了。

TA的精华主题

TA的得分主题

发表于 2014-12-24 20:57 | 显示全部楼层
wcymiss 发表于 2014-12-24 15:03
1、UTF8ToGB2312这个函数你根本没用上,事实上,仅仅登录,不提取数据的话也不需要用这个函数。
2、第二 ...

吴姐 谢谢了

第二次post里的Content-Type后面的内容错误?在登录时网址又重新指定了,为什么不对呀???

用户名已经取到系统转化玩的,还需要在encodeURI函数转码?

每次请求都要发送从上一次的responsetext里获取的这两个参数的值,第一次取的__VIEWSTATE和__EVENTVALIDATION的和在第二次获取的差不多,

但是第二次与第三次的__VIEWSTATE和__EVENTVALIDATION结构发生变化太大了,该如何办呀???

VIEWSTATE.zip (3.36 KB, 下载次数: 3)

点评

你这个网是内网,我也没法帮你测试。反正你自己发送的请求和fiddler里的发送请求要一致。自己慢慢调试吧。  发表于 2014-12-25 09:17

TA的精华主题

TA的得分主题

发表于 2014-12-25 13:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这是论坛上的一段代码,Debug.Print .responseText立即窗口出现的源代码显示的数据不全,无法提取数据,但是运行代码以后可以提取数据,"<tbody>")(1), "</td>", ">"), "<tr>" 没有见着。
求解答。

899.rar

8.07 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-25 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hhaa999 发表于 2014-12-25 13:29
这是论坛上的一段代码,Debug.Print .responseText立即窗口出现的源代码显示的数据不全,无法提取数据,但是 ...

首先,你满足了本帖一楼的“学网抓对vba要求”吗?

其次,你看了本帖的每一楼吗?

对于基础的vba问题,自己在论坛里学吧。我懒得解释。

TA的精华主题

TA的得分主题

发表于 2014-12-25 23:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wcymiss 发表于 2014-12-25 15:02
首先,你满足了本帖一楼的“学网抓对vba要求”吗?

其次,你看了本帖的每一楼吗?

http://my.qzone.qq.com/app/607.html
这个登录是MD5加密的 能帮忙看看吗?谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-26 10:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yangyangzhifeng 发表于 2014-12-25 23:03
http://my.qzone.qq.com/app/607.html
这个登录是MD5加密的 能帮忙看看吗?谢谢

这个就一个skey值就能登录了。连bkn都用不着。我帖子里有获取skey的方法。不过是单个账号的。

根据qq号和密码获取skey的代码我也写过。不过这个不宜公开。其实百度能找到相关代码。。。

TA的精华主题

TA的得分主题

发表于 2014-12-26 15:12 | 显示全部楼层
suwenkai 发表于 2014-10-21 22:18
第一题

新手来学习学习

TA的精华主题

TA的得分主题

发表于 2014-12-26 15:31 | 显示全部楼层
liucqa 发表于 2014-10-24 09:50
对好多有采集需求的人来说,看看教程,获取数据并不难。难的是不知道如何处理采集到的数据,并生成自己需要 ...

liucqa大师说到了我的心坎上啊!!!看那么多牛人根据wcymiss大师的教程就把作业全部做到底了,后面一大推代码根本看不懂,正愁咋办呢?

点评

liucqa “大师”?  发表于 2014-12-28 11:29

TA的精华主题

TA的得分主题

发表于 2014-12-28 11:14 | 显示全部楼层
wcymiss 发表于 2014-10-21 11:45
fiddler的安装、设置、使用
安装:
下载链接:http://w.x.baidu.com/alading/anquan_soft_down_normal/10 ...

女神,我的女神现身江湖,所讲正是小弟要学的,赶紧收藏以备学习。谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 23:25 , Processed in 0.038850 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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