Отладка VBA, объект не поддерживает это свойство - PullRequest
0 голосов
/ 20 сентября 2018

Я очень новичок в VBA и переполнение стека.Я занимаюсь разработкой vba, которая берет первые 5 URL-ссылок от китайской поисковой системы Baidu.com.Но есть некоторые ошибки, которые я не мог решить после дня, глядя на это.Пожалуйста, помогите.

Sub GettingURL()

    Application.ScreenUpdating = False
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "https://baidu.com/s?wd=" & Sheets("Data").Cells(1, 2).Text
        While .Busy Or .readyState < 4:  DoEvents:  Wend

        With .document.all.ires.getElementsByTagName("A")
            c = 3
            For u = 0 To Application.Min(8, .Length - 1) Step 2
                Sheets("Data").Cells(c, 1) = .Item(u).href
                c = c + 1
            Next
        End With
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub

1 Ответ

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

tl; dr;

Итак, это беспокоило меня до тех пор, пока ....... Я подумал, что если ссылки в HTML будут появляться по-разному при направлении кpage.

Таким образом, хотя технически это не первые 5 (поскольку стилизация страницы не соответствует элементу номер 5; в нем отсутствует тег h3), это выглядит так, как если бы вы смотрели этот список в комментариях.по окончательному полученному URL.


Комбинация селекторов CSS:

Я использую комбинацию селекторов CSS для нацеливания на страницу #content_left h3 [href].При этом выполняется поиск элементов с атрибутом href внутри родительского элемента h3 внутри элемента с идентификатором content_left.

. Так выглядит запрос CSS для поискового запроса red.(Образец предоставлен)

enter image description here


VBA:

Вы применяете комбинацию селектора CSS с помощьюquerySelectorAll метод document, так как вы ожидаете более одного сопоставленного элемента, который возвращает статический nodeList.Вы зацикливаете .Length возвращенных nodeList для доступа к элементам по индексу.

Option Explicit
Public Sub GettingURL()
    Dim c As Long, u As Long
    Application.ScreenUpdating = False
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "https://baidu.com/s?wd=" & Sheets("Data").Cells(1, 2).Text
        While .Busy Or .readyState < 4:  DoEvents:  Wend

        With .document.querySelectorAll("#content_left h3 [href]")
            c = 3
            For u = 0 To 4                       ' Application.Min(8, .Length - 1)
                Sheets("Data").Cells(c, 1) = .Item(u)
                c = c + 1
            Next
        End With
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub

Результаты:

Сравнение полученных URL-адресов и того, чтов конечном итоге они выглядят так: если вы введете их на панели навигации, вы получите следующее:

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...