![](/img/trans.png)
[英]Why is VBA throwing Run Time Error 438 when using querySelector to click link on website?
[英]VBA Excel Run time error 438 / getElementbyClassName
我是新手,嘗試從imdb.com網站上抓取長寬比詳細信息。
我在You Tube上掠奪了一些代碼,並使用inspect元素對其進行了修改。 該代碼打開imdb並按標題運行搜索,但返回運行時錯誤438。理想情況下,我希望它返回最上面的結果的html,這樣我就可以進一步單擊最上面的結果以繼續瀏覽帶有技術的頁面可以從中獲取縱橫比信息並將其粘貼到單元格中的詳細信息。
不幸的是,我的點擊說明失敗了-甚至還沒有提取縱橫比信息。
誰能看到我哪里出問題了?
非常感謝,
缺口
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("Title").Row And Target.Column = Range("Title").Column Then
Dim ie As New InternetExplorer
ie.Visible = True
ie.navigate "https://www.imdb.com/find?ref_=nv_sr_fn&q=" & Range("Title").Value
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.document
Dim sDD As String
doc.getElementsByTagName("a").Click
End If
End Sub
因此,解決您的代碼
Target.Address = Range("Title").Address
a
tag元素。 您希望第一個搜索結果a
標簽元素。 您可以使用CSS選擇器組合來獲得第一個搜索結果a
tag元素,如下所示。
我使用.result_text a
的CSS選擇器組合來定位帶有標簽a
父類result_text
元素。 的.
是一個類選擇器 。
這種組合稱為后代選擇器 。
使用Red October
表中的搜索詞,這是CSS查詢的第一個結果是:
它是具有基本字符串https://www.imdb.com
的相對鏈接。
通過querySelector
方法應用意味着僅返回第一個匹配的結果,即最高結果。
VBA:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = Range("Title").Address Then
Dim ie As New InternetExplorer
ie.Visible = True
ie.navigate "https://www.imdb.com/find?ref_=nv_sr_fn&q=" & Range("Title").value
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.document
doc.querySelector(".result_text a").Click
'other code
End If
Application.EnableEvents = True
End Sub
這行代碼:
doc.getElementsByTagName("a")
在HTML文檔中為您提供了超鏈接集合 。 也就是說,它為您提供了與給定條件匹配的所有元素(如果有)。 但是,一些問題可能會出現:
可能沒有任何超鏈接-因此沒有要單擊的元素。
您沒有引用任何要單擊的元素。 如果要在找到的項目的集合中找到第一個,則可以按照建議使用索引。 否則,您可能會尋找其他點擊條件(例如其文字或其他給定的屬性)。
即便如此,例如,如果找到的元素被另一個元素遮蓋,則瀏覽器可能無法單擊該元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.