簡體   English   中英

VBA Excel運行時錯誤438 / getElementbyClassName

[英]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

因此,解決您的代碼

  1. 您可以使用較短版本的Target.Address = Range("Title").Address
  2. 您不希望第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文檔中為您提供了超鏈接集合 也就是說,它為您提供了與給定條件匹配的所有元素(如果有)。 但是,一些問題可能會出現:

  1. 可能沒有任何超鏈接-因此沒有要單擊的元素。

  2. 您沒有引用任何要單擊的元素。 如果要在找到的項目的集合中找到第一個,則可以按照建議使用索引。 否則,您可能會尋找其他點擊條件(例如其文字或其他給定的屬性)。

  3. 即便如此,例如,如果找到的元素被另一個元素遮蓋,則瀏覽器可能無法單擊該元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM