|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
onlycxb 发表于 2015-4-13 08:06
12、13楼的代码测试并不成功——若取多页数据,则结果均为第1页的数据。
而我用如下代码,结果取多页数据时仍都重复为第一页的数据。看来含有ViewState、EventValidation数据的网页取数对我来说仍然是一个难点,望有高人帮忙指点一二:- Sub test()
- Dim html As Object, db As Object
- Cells.Clear
- Url = "http://www.cfh.ac.cn/Album/ShowAlbum.aspx?albumid=4b7af393-99db-4461-a7c5-daa98b9384e5&Username=arisaema&AspxAutoDetectCookieSupport=1"
- With CreateObject("Microsoft.XMLHTTP")
- .Open "GET", Url, False
- .send
- tt = .responseText
- n = Val(Split(Split(.responseText, "总共")(1), "张")(0))
- p0 = Val(Split(Split(.responseText, "当前是第1/")(1), "页")(0))
- ViewState = encodeURI(Split(Split(tt, "__VIEWSTATE"" value=""")(1), """")(0)) '取得VIEWSTATE的Post参数
- EventValidation = encodeURI(Split(Split(tt, "__EVENTVALIDATION"" value=""")(1), """")(0)) '取得EVENTVALIDATION的Post参数
- 'For p = 1 To p0
- For p = 1 To 2
- PostData = PostData & "__VIEWSTATE=" & ViewState & "&__EVENTVALIDATION=" & EventValidation
- PostData = PostData & "&ctl00%24HiddenField_MasterUserName="
- PostData = PostData & "&ctl00%24HiddenField_VisitorUserName="
- PostData = PostData & "&ctl00%24CurrAlbumID="
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24CurrentAlbumId=4b7af393-99db-4461-a7c5-daa98b9384e5"
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24TotalPhotos=" & n
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24TotalPages=" & p0
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24CurrentPage=" & p
- PostData = PostData & "&AlbumRefUrl="
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24TxtPageSn="
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24ImgBtnNext.x=33"
- PostData = PostData & "&ctl00%24ContentPlaceHolder_body%24ImgBtnNext.y=9"
- .Open "POST", Url, False
- .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
- .send (PostData)
- Set html = CreateObject("htmlfile")
- html.body.innerHTML = .responseText
- r0 = IIf(p = 1, 0, ActiveSheet.UsedRange.Rows.Count)
- Set r = html.all.tags("table")(1).Rows
- For i = 0 To r.Length - 1
- For j = 0 To r(i).Cells.Length - 1
- Cells(r0 + i + 1, j + 1) = r(i).Cells(j).innertext
- Next j
- Next i
- ViewState = encodeURI(Split(Split(.responseText, "__VIEWSTATE"" value=""")(1), """")(0)) '取得VIEWSTATE的Post参数
- EventValidation = encodeURI(Split(Split(.responseText, "__EVENTVALIDATION"" value=""")(1), """")(0)) '取得EVENTVALIDATION的Post参数
- Next p
- End With
- End Sub
- Function encodeURI(ByVal strText As String) As String
- With CreateObject("msscriptcontrol.scriptcontrol")
- .Language = "JavaScript"
- encodeURI = .Eval("encodeURIComponent('" & strText & "');")
- End With
- End Function
复制代码 |
评分
-
1
查看全部评分
-
|