从 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
为了获取所需的信息,我尝试了:
MsgBox ie.document.body.innerhtml
有效并为我提供了完整的 html 代码。
getElementsByTagName
firstChild
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 实例的引用时,您无需重新附加到该实例。
我想使用 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
为了获取所需的信息,我尝试了:
MsgBox ie.document.body.innerhtml
有效并为我提供了完整的 html 代码。
getElementsByTagName
firstChild
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 实例的引用时,您无需重新附加到该实例。