Ошибка выполнения VBA Excel 438 / getElementbyClassName - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок, пытающийся получить информацию о соотношении сторон на веб-сайте imdb.com.
Я похитил некоторый код на You Tube и адаптировал его с помощью элемента inspect.Код открывает imdb и запускает поиск по заголовку, но возвращает ошибку времени выполнения 438. В идеале я хотел бы, чтобы он возвращал HTML верхнего результата, чтобы я мог выполнить дополнительный щелчок по верхнему результату, чтобы перейти на страницу с технологиейподробности, откуда я мог бы получить информацию о соотношении сторон и вставить ее в ячейку.

К сожалению, я получил ошибку из своей инструкции Click - даже не дошел до момента извлечения информации о соотношении сторон.

Кто-нибудь может увидеть, где я ошибся?

Большое спасибо,

Ник

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

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Эта строка кода:

doc.getElementsByTagName("a")

дает вам коллекцию гиперссылок в вашем HTML-документе.То есть он дает вам ВСЕ элементы, которые соответствуют заданным критериям, если таковые имеются.Однако могут возникнуть некоторые проблемы:

  1. Возможно, гиперссылки недоступны - поэтому нет элементов, на которые можно нажать.

  2. Вы находитесьне ссылаясь ни на один элемент, чтобы нажать.Если вам нужен первый элемент в коллекции найденных предметов, вы можете перейти с указателем, как это было предложено.Иначе, вы можете искать другой критерий клика (например, какой у него текст или другой заданный атрибут).

  3. Тем не менее, найденный элемент может быть не кликабельным в вашем браузере, если,например, он затеняется другим элементом.

0 голосов
/ 25 сентября 2018

Итак, обращаясь к вашему коду

  1. Вы можете использовать более короткую версию Target.Address = Range("Title").Address
  2. . Вам не нужен первый элемент тега a.Требуется первый результат поиска a элемент тега.

Вы можете использовать комбинацию селекторов CSS, чтобы получить первый результат поиска a элемент тега, как показано ниже.

Iиспользуйте комбинацию селектора CSS .result_text a для нацеливания элементов в родительском классе result_text с тегом a.. является селектором класса .

Эта комбинация называется селектором потомков .

Использование поискового термина в листе Red October это первый результат CSS-запроса:

enter image description here

Это относительная ссылка с базовой строкой 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
...