使用此HTML代码:
<table class="table-grid">
<tr>
<th>auto.model</th>
<td>
<pre>'Toyota Avensis Wagon'</pre>
</td>
</tr>
<tr>
<th>auto.year</th>
<td>
<pre>2005</pre>
</td>
</tr>
</table>
如果我采用参数&#34; auto.model&#34;在<th></th>
标签之间,想要接收&#34;丰田Avensis Wagon&#34;,即<pre></pre>
之间的下一个表达。理想情况下,我希望有这样的功能。
谢谢@Jeeped,但代码提升&#34;类型不匹配&#34;错误并指向Set el = Param.PreviousSibling
:
Sub Extract_TD_text()
Dim URL As String
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim Params As IHTMLElementCollection
Dim Param As HTMLTableCell
Dim Val As HTMLTableCell
Dim r As Long
Dim el As HTMLTableCell
URL = "My URL"
Set IE = New InternetExplorer
With IE
.navigate URL
.Visible = False
'Wait for page to load
While .Busy Or .READYSTATE <> READYSTATE_COMPLETE: DoEvents: Wend
Set HTMLdoc = .document
End With
Set Params = HTMLdoc.getElementsByTagName("tr")
For Each Param In Params
If Param.innerText Like "*auto.model*" Then
Set el = Param.PreviousSibling
Exit For
End If
Next
If Not el Is Nothing Then Debug.Print el.innerText
IE.Quit
Set IE = Nothing
End Sub
答案 0 :(得分:0)
我不建议使用previousSibling
,而是建议使用nextElementSibling
。
从当前设置HTML和VBA代码的方式来看,传递的当前“参数”值应为<th>
标记。我认为previousSibling
可能会检查之前的标记,并且因为它是<tr>
(父元素)中的第一个元素,所以不应该有任何东西(除了可能是一个不可见的节点 - previousSibling
可以查找,但我们不需要)。
我认为 nextElementSibling
应该能够找到您的<td>
标记,因为它位于<th>
标记之后。