从 HTML table 单元格中提取数据

Extract data out of HTML table cell

我想使用 VBScript 从网站(non-public 内部网)中提取信息。这是一个始终在网站上的同一字段中的时间,但每个日期都不同,之后我想在当天的这个时间使用此信息在我的 outlook 中创建一个会议(持续时间始终恰好为 1 小时)。我用VBScript打开网站放会议没问题,但是读取网站字段的时间信息有问题

很遗憾,我无法在此处粘贴完整结构的图片,所以我将您要查找的信息的 DOM 元素粘贴给您:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Strict//EN"><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<HTML><BODY id="info_body" aLink="#ff0000" link="#0000ff" bgColor="#ebf7ff" text="#000000" vLink="#800080"><TABLE class="topMargin" border="0" cellSpacing="2" cellPadding="2" width="600" align="center"><TBODY>    <TR class="data">

<TD>
11:42
</TD>

</TR></TBODY></TABLE></BODY></HTML>

这对你有帮助吗?我需要将信息(在本例中为“11:42”)设置为变体 and/or 以在 Msgbox 中显示它。 结构是:

html --> body --> iframe (3rd) --> html --> body --> table (1st) --> tbody
--> tr class = "data" --> td (4th)

打开我使用的网站:

SET ie1 = WScript.CreateObject("InternetExplorer.Application", "IE_")
myUrl1="http://xxxx" 'website
hwnd = ie1.hwnd
ie1.Navigate myUrl1

Set oShell = CreateObject("Shell.Application")
For Each Wnd In oShell.Windows
  If hwnd = Wnd.hwnd Then Set ie1 = Wnd
Next 

为了获取所需的信息,我尝试了:

  1. MsgBox ie.document.body.innerhtml

    有效并为我提供了完整的 html 代码。

  2. getElementsByTagName

  3. firstChild
  4. ie.document.childNodes(0).childNodes(1).childNodes(0).childNodes(0).childNodes(2).childNodes(3)

我在互联网上找到了这些代码片段,显然它们适用于其他人,但很抱歉,我无法适应我的具体要求和案例。

2015 年 5 月 27 日更新:

有了这个新版本,它在大多数情况下都能正常工作,但不幸的是,并非总是如此...

Option Explicit

Dim ie, b, url
Dim hwnd, oshell, wnd
Dim tbl, iframe, td
Dim c, Zeit1, start_punkt
Dim outl, a, myNameSpace, myFolder, myitem, alle_items, myitem_new, olmeeting
Dim ie_exist

URL = "http://xxxx" 'website

SET ie = WScript.CreateObject("InternetExplorer.Application", "IE_")
hwnd = ie.hwnd
ie.Navigate url

Set oShell = CreateObject("Shell.Application")
For Each Wnd In oShell.Windows
If hwnd = Wnd.hwnd Then Set ie = Wnd
Next

DO WHILE ie.ReadyState <> 4
LOOP

'get 3rd iframe in page
Set iframe = ie.document.getElementsByTagName("iframe").Item(2).contentWindow

'get 1st table in iframe
Set tbl = iframe.document.getElementsByTagName("table").Item(0)

'get 4th cell in table
Set td = tbl.getElementsByTagName("td").Item(8)

Msgbox td.innerText

当它不工作时,我在行中收到一条未知的错误消息:

If hwnd = wnd.hwnd then set ie = Wnd

@Ansgar: 如果我删除 Set oShell = ... 部分,我会收到错误消息:

The object invoked has disconnected from its clients.

如果我删除 Set oShell = ... 部分以及 DO WHILE ie.ReadyState 循环,我会在行中收到未知错误:

Set iframe = ie.document.getElementsByTagName("iframe").Item(2).contentWindow

有什么想法吗?至少上面的版本大部分时间都有效(尝试过的替代方案每次都会出错),但是有没有可能解决这个问题并让它每次都能正常工作?

应该这样做:

url = "http://www.example.com/"

Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate url

While ie.ReadyState <> 4
  WScript.Sleep 100
Wend

'get 3rd iframe in page
Set iframe = ie.document.getElementsByTagName("iframe").Item(2).contentWindow
'get 1st table in iframe
Set tbl = iframe.document.getElementsByTagName("table").Item(0)
'get 4th cell in table
Set td  = tbl.getElementsByTagName("td").Item(3)

MsgBox td.innerText

顺便说一句,这段代码毫无意义,所以放弃它:

<strike>Set oShell = CreateObject("Shell.Application")
对于 oShell.Windows 中的每个 Wnd
  如果 hwnd = Wnd.hwnd 则设置 ie1 = Wnd
下一个</strike>

当您已经拥有对 Internet Explorer 实例的引用时,您无需重新附加到该实例。