我有一个我想要谷歌生日的名单。此VBA脚本允许我仅在具有该类名称的特定元素时才从Google搜索和提取数据。
Sub Searcher()
Dim objIE As InternetExplorer
Dim doc As HTMLDocument
Dim y As Integer
Dim x As Integer
Dim result As String
Set objIE = New InternetExplorer
y = 2
For x = 2 To 3000
objIE.Visible = True
objIE.navigate "https://www.google.com/search?q=" & Sheets("Sheet4").Range("A" & y).Value & "+" & Sheets("Sheet4").Range("B" & y).Value & "+Born"
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Set doc = objIE.document
result = doc.getElementsByClassName("_XWk")(0).innerText
Sheets("Sheet4").Range("C" & y).Value = result
y = y + 1
Next
objIE.Quit
End Sub
如果网站没有具有该类名的元素,则会超时并出错。我想知道是否有某种If /然后我可以使用如果该网站没有该类名称并让它跳到下一个搜索。任何想法都会有所帮助。非常感谢。
答案 0 :(得分:0)
这样的东西?
Set resultClasses = html.getElementsByTagName("div")
For Each resultClass In resultClasses
If resultClass.getAttribute("class") = "_XWk" Then
Msgbox "Found"
Exit For
End If
Next resultClass
答案 1 :(得分:0)
错误必须在这里发生,可能是&#34; 424对象,变量或未设置的块&#34;错误。
result = doc.getElementsByClassName("_XWk")(0).innerText
原因是,因为如果doc.getElementsByClassName("_XWk")
不存在,那么链式表达式的部分将计算为Nothing
。所以你最终得到:
result = Nothing(0).innerText
哪个失败了,因为您无法为Nothing
编制索引而您无法.innerText
出错:)
解决方案是避免将可能评估为Nothing
的表达式链接起来,并适当地处理错误:
If doc.getElementsByClassName("_XWk") Is Nothing Then
'Do nothing
Else
result = doc.getElementsByClassName("_XWk")(0).innerText
Sheets("Sheet4").Range("C" & y).Value = result
End If
y = y + 1 '## might need to put this up in the Else block, I'm not sure.