VBA Web Automation на динамическом сайте - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь удалить владельцев штрих-кодов с этого сайта: http://gepir.gs1.org/index.php/search-by-gtin

Я получаю сообщение об ошибке «Объект не поддерживает это свойство или метод» из-за последней строки. Я пытался извлечь его с помощью класса и тега, но не смог.

Я пытаюсь извлечь название компании из динамической таблицы.

Sub aa()

Dim ie As New SHDocVw.InternetExplorer
Dim doc As HTMLDocument
Dim aaa As Object
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer

ie.Visible = True
ie.navigate "gepir.gs1.org/index.php/search-by-gtin"

Do While ie.readyState <> READYSTATE_COMPLETE
Loop

Debug.Print ie.LocationName, ie.LocationURL

Set doc = ie.document

ie.document.forms("searchbygtin").elements("keyValue").Value = "685387379712"
ie.document.forms("searchbygtin").elements("method").Click

Debug.Print ie.document.getElementsBytag("tr")(7).innerText

End Sub

Любая помощь была бы великолепна, Спасибо

1 Ответ

0 голосов
/ 11 ноября 2018

Вам нужно TagName

Debug.Print ie.document.getElementsByTagName("tr")(7).innerText

Я получил капчу, поэтому сомневаюсь, что вы сможете выполнить эту задачу таким образом. Селен и IE, кажется, вызывают капчу, по крайней мере, для меня.


Если бы не капча, я бы переписал ваш скрипт следующим образом (возможно, с циклом, чтобы убедиться, что присутствует элемент tr):

Option Explicit

Public Sub GetLastChangeDate()
    Dim ie As New SHDocVw.InternetExplorer, doc As HTMLDocument
    Const URL = "gepir.gs1.org/index.php/search-by-gtin"

    With ie
        .Visible = True
        .navigate URL

        While .Busy Or .readyState < 4: DoEvents: Wend

        Set doc = .document

        Debug.Print .LocationName, .LocationURL

        doc.getElementById("keyValue").Value = "685387379712"
        doc.getElementById("submit-button").Click

        While .Busy Or .readyState < 4: DoEvents: Wend

        Debug.Print .document.getElementsByTagName("tr")(7).innerText
    End With
End Sub
...