2013-09-27 110 views
2

我有一个解析HTML页面以查找具有指定ID的元素的脚本。我需要的是获得父节点(实际上,我需要去2个父节点),以便我可以循环访问表中的所有链接,以查找我想要的链接或所以我可以解析整个HTML表找到我想要的链接。VBA获取元素的父节点

Sub testmacro() 

'Constants 
Const pdlID = "Id of the element" 
Const urlbase = "what ever url" 

'containers 
Dim web As Object 
Dim prompt As String 
Dim pdlTbl As Object 
Dim pdllink As Object 


'Get URL 
prompt = InputBox("Paste the URL here: ", "URL") 

'create IE instance 
Set web = CreateObject("InternetExplorer.Application") 
web.Visible = True 
web.Navigate prompt 

Do While web.Busy Or web.ReadyState <> 4 
    DoEvents 
Loop 

'get IE document 
Set pdlTbl = web.Document 
Set pdlTbl = pdlTbl.getelementbyid(pdlID) 

'Get parent node of element 

web.Quit 
Set web = Nothing 

End Sub 

我试图找到关于获取父节点的信息,但我不能如此帮助找到父节点会很好。

此外,我有重大问题试图循环通过文档中的元素。我从这个网站抓取了许多代码示例,并且他们都返回了相同的错误“对象不支持这种方法”或者其他的东西。这是看起来像这样的循环的第一行高亮。

for each a in pdltbl 

next a 

这个错误就出来了,不管我试图使用标签或我通过看元素的类型(pdlID是指用于参考的TD元素)

基本上,我只是想能够通过查找表来找到特定的URL的链接(基于关中提示的网址)

+0

您的循环问题尚不清楚 - 您如何设置“pdllink”的值? –

+0

回顾上面的编辑:设置pdllink的方式与设置pdltbl的方式相同 – gNerb

+0

'getElementbyid'返回单个节点(标识在文档中必须是唯一的),而不是集合:不能使用For Each。 –

回答

2
Set pdlTbl = pdlTbl.getelementbyid(pdlID) 
Set parentParent = pdlTbl.parentElement.parentElement 

得到表中的所有链接:

Set allLinks = tbl.getElementsByTagName("a") 
For Each a in allLinks 
    '... 
Next a