IE excel vba для получения данных - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно получить данные с веб-сайта. Содержимое сайта соответствует тегу, и мне нужно извлечь атрибут href.

ссылка rel = 'canonical' href = 'http://www.wingatecinci.com'

Для этого я написал следующий код для извлечения атрибута href в Excel

    Option Explicit
    Sub Tester()
    Dim IE As New InternetExplorer
    Dim i As Long
    Dim Cano As String

    Range("A1").Value = "Cano"

    Set IE = New InternetExplorer
    URL = "http://www.wingatecinci.com/"
    IE.navigate Url
    IE.Visible = True

    Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Cano = IE.document.getElementsByTagName("canonical")(i).innerHTML
    Range("A" & i + 2).Value = Cano
End Sub

Но я не добился успеха, и перед лицом ошибки вижу этот скриншот http://prntscr.com/kpy9dh Может кто-нибудь разобраться в этом и помочь мне ??

Ответы [ 2 ]

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

Эти две строки ссылаются на i как переменную:

Cano = IE.document.getElementsByTagName("canonical")(i).innerHTML
Range("A" & i + 2).Value = Cano

Но вы не установили значение i в вашем коде. Возможно, вы хотели поместить это в цикл?


Также «тег» здесь - это <link> - часть "canonical" является атрибутом этого тега, поэтому вам необходимо более детально проработать код, чтобы проверить на них:

For Each el In IE.Document.getElementsByTagName("link")
    If el.hasAttribute("link") Then
        // do something with this element
    End If
Next
0 голосов
/ 03 сентября 2018

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

Option Explicit
Public Sub GetLink()
    Dim IE As New InternetExplorer, ele As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5
    With IE
        .Visible = True
        .navigate "http://www.wingatecinci.com/"

        t = Timer
        Do While ele Is Nothing
            DoEvents
            On Error Resume Next
            Set ele = .document.querySelector("[rel='canonical']")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop
        If Not ele Is Nothing Then Debug.Print ele.href
        .Quit
    End With
End Sub

Ссылка:

  1. Библиотека объектов Microsoft HTML
  2. Microsoft Internet Controls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...