我正在尝试使用来自网站的VBA提取一些值
以下代码包含我要查找的数据数组。这非常有效,并为我提供了我正在寻找的数据数组。
document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")
以上结果是
<NodeList length="23">...</NodeList>
但是当我尝试通过使用以下代码在VBA中运行循环来提取值时
lnth = document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']").Length - 1
For x = 0 To lnth
firstResult = document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")(x).innerText
Next x
代码会在firstResult上出错,因为它不会获得任何值。我检查过Internet Explorer没有价值,如果我使用&#34;(&#34;括号,但是如果我使用&#34; [&#34;在Internet Explorer上它可以工作,但VBA不接受&#34; [&#34; Brackets。
document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")[0]
上述代码适用于Internet Explorer控制台,但无法在VBA中使用。
我相信如果你能就这方面的解决方法提出建议,我会遗漏一些会有很大帮助。
答案 0 :(得分:3)
要获取innerText,您可以多次使用getElementsByClassName
2次,其中一次在for each .. next
循环中,因为您的值在list-flights -> price -> cash js_linkInsideCell
中:
Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")
For Each Item In priceData
Debug.Print Item.getElementsByClassName("cash js_linkInsideCell")(0).innerHTML
Next Item
使用.querySelectorAll("[class$='price']")
也可以,但解析后会崩溃IE对象。试试看它是否崩溃:
Set priceData = IE.document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")
For Each Item In priceData
Debug.Print Item.getElementsByClassName("cash js_linkInsideCell")(0).innerHTML
Next Item
一些快速说明:
1 - 您可以使用此代码等待IE对象加载url:
Do While IE.Busy
DoEvents
Loop
2 - 有时,即使IE对象准备就绪,查询结果也不会快速返回。这意味着您要查找的元素尚未准备好并且不存在,因此您收到错误消息:
运行时错误&#39; 91&#39;:对象变量或未设置块变量
为避免此消息,我的解决方法如下:
Do
On Error Resume Next
Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")
Loop Until Err.Number <> 91
我希望这会有所帮助。