如何从vbscript中的html页面中提取值 - 我尝试了MSXML2.DOMDocument

时间:2014-12-12 11:25:05

标签: html vbscript domdocument

下面是我尝试从网页中的节点获取值的一些代码。但是在尝试设置objNode时它失败了...感谢任何帮助。

Dim objHttp, sWebPage, objNode, objDoc

Set objDoc = CreateObject("MSXML2.DOMDocument")
objDoc.Load "http://www.hl.co.uk/shares/shares-search-results/a/aveva-group-plc-ordinary-3.555p"

' objDoc.setProperty "SelectionLanguage", "XPath"

' Find a particular element using XPath:
Set objNode = objDoc.selectSingleNode("span[@id='ls-bid-AVV-L']")
MsgBox objNode.getAttribute("value")

2 个答案:

答案 0 :(得分:3)

  1. 期望XML解析器处理 clean HTML非常乐观;对于有缺陷的HTML,你可以忘记它(ref)。
  2. 你不应该在没有检查错误的情况下加载。see also)。在你的情况下,抛出的.reason是"属性'属性'此元素未在DTD / Schema中定义。"
  3. 您可以使用objDoc.validateOnParse = False关闭验证,并避免使用objDoc.async = False的怪物页面出现问题(至少没有" msxml3.dll:完成此操作所需的数据尚不可用。"错误)。
  4. 要在任何地方搜索范围(不知道它在层次结构中的位置),您需要" // span [@id =' ls-bid-AVV-L']"而不是" span [@id =' ls-bid-AVV-L']"。
  5. 要查找的范围没有名为value的属性;获得" 1,334.00p"您需要提出objNode.text
  6. 但这一切都无济于事:页面甚至没有格式良好。 .parseError.reason是"结束标记' div'与开始标记不匹配'输入'。"。

答案 1 :(得分:1)

使用Internet Explorer COM对象:

url = "http://www.hl.co.uk/shares/shares-search-results/a/aveva-group-plc-ordinary-3.555p"

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate url
While ie.ReadyState <> 4
  WScript.Sleep 100
Wend

MsgBox ie.document.getElementById("ls-bid-AVV-L").innerText

ie.Quit