我正在尝试使用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/

10-10 18:48
查看更多