我想用VBScript从网站(非公共内部网)中提取信息。这个时间总是在网站的同一个字段中,但每个日期都不同,之后我想用这个信息在我的展望中创建一个会议(持续时间总是恰好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”)设置为变量和/或将其显示在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 = ...
部分,我会收到错误消息:
调用的对象已与其客户端断开连接。
如果我删除Set oShell = ...
部分以及DO WHILE ie.ReadyState
循环,我会在行中收到未知错误:
Set iframe = ie.document.getElementsByTagName("iframe").Item(2).contentWindow
有什么想法吗?至少上面的版本在大多数情况下都有效(每次出错时都会尝试替代版本),但有没有可能解决问题并让它在每次都工作?
答案 0 :(得分:1)
这样的事情应该做:
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
顺便说一下,这段代码毫无意义,所以放弃它:
Set oShell = CreateObject("Shell.Application")
For Each Wnd In oShell.Windows
If hwnd = Wnd.hwnd Then Set ie1 = Wnd
Next
当您已经拥有对该实例的引用时,您不需要重新连接到Internet Explorer实例。