我正在尝试使用excel vba从 aspx 页面检索表数据。我知道如何从URL获取表数据,但以下是主要问题。
问题
有一个aspx页面(例如www.abc.aspx)。我目前在此页面上。让此页面成为 page1 。
现在,我单击当前页面上的 page2 链接。值得注意的是,单击此链接后,旧的URL(www.abc.aspx)不会更改,但是内容会更改。(内容位于第2页)
如果查看第1页源代码,它具有
<form method="post" action="page1 url" id="Form1">
无论page1 (单击page2单击)上的操作是什么,它都会回发相同的 page1 url。
那么,由于我不知道它的URL,如何在excel VBA中获取第2页 表数据?
代码
这就是我用来获取表数据的内容。
我使用了Internet Explorer对象,然后导航到链接并将文档保存在htmldoc中。
ie.navigate "url"
Do While ie.READYSTATE <> READYSTATE_COMPLETE
Application.StatusBar = "Fetching data..."
DoEvents
Loop
Set htmldoc = ie.document
'Column headers
Set eleColth = htmldoc.getElementsByTagName("th")
j = 0 'start with the first value in the th collection
For Each eleCol In eleColth 'for each element in the td collection
ThisWorkbook.Sheets(1).Range("A1").Offset(i, j).Value = eleCol.innerText 'paste the inner text of the td element, and offset at the same time
j = j + 1 'move to next element in td collection
Next eleCol 'rinse and repeat
'Content
Set eleColtr = htmldoc.getElementsByTagName("tr")
'This section populates Excel
i = 0 'start with first value in tr collection
For Each eleRow In eleColtr 'for each element in the tr collection
Set eleColtd = htmldoc.getElementsByTagName("tr")(i).getElementsByTagName("td") 'get all the td elements in that specific tr
j = 0 'start with the first value in the td collection
For Each eleCol In eleColtd 'for each element in the td collection
ThisWorkbook.Sheets(1).Range("D3").Offset(i, j).Value = eleCol.innerText 'paste the inner text of the td element, and offset at the same time
j = j + 1 'move to next element in td collection
Next eleCol 'rinse and repeat
i = i + 1 'move to next element in td collection
Next eleRow 'rinse and repeat
ie.Quit
Set ie = Nothing
编辑:
示例
如果我们单击Stack Overflow(https://stackoverflow.com/questions)中的问题
然后点击问题的第2页(新链接为https://stackoverflow.com/questions? page = 2 &sort = newest)
就我而言,如果我们单击 page2 ,则新链接不会更新。它与旧链接相同。
编辑:我在这里找到了类似的问题
How do I get url that is hidden by javascript on external website?
谢谢。
最佳答案
好的,我很同情,这是一个流派(包括Tim Berners-Lee),它说每个单独的页面都应该有自己的URI和that these don't change。
但是网站管理员可以并且确实会把您弄乱。他们可以重定向您的HTTP请求,并可以像您这样混淆导航。他们可以重写HTTP请求。
你有两个选择
选项1-让Internet Explorer为您解决新内容
因此,如果内容在屏幕上可见,那么它必须在文档对象模型(DOM)中。在IE中或实际上在Chrome中,可以右键单击并获取上下文菜单,然后选择“检查”以查看元素在DOM中的位置。
我认为您的代码显示出足够的专业知识可以深入研究。但是,有时某些网站喜欢禁用“检查”菜单选项,以避免程序员四处逛逛。 (编辑:就像您现在的情况一样,我已经阅读了评论)
选项2-使用HTTP嗅探工具(例如Fiddler)来检测HTTP重定向/重写
就像我上面说的,HTTP请求可以由Web服务器重写,但可以重定向到HTTP protocol does give notifications of redirects。有一些工具可以检测到这一点。流行的工具是Fiddler,今天我发现有一个特定的IE Fiddler add-on。
老实说,尽管浏览器本身附带的开发人员工具,尤其是Chrome(Ctrl + Shift + I,然后是“网络”标签)可以将网络流量显示的详细程度与任何嗅探工具相提并论。
抱歉,您不赞成投票,这似乎是一个完全合理的问题。
关于asp.net - 使用Excel VBA从aspx页的表中检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47939045/