Как бы я потянул этот текст

Я просматриваю эту веб-страницу -> https://www.fedex.com/apps/fedextrack/?action=track&tracknumbers=671299425542&locale=en_US&cntry_code=us

И я хочу вернуть дату доставки Чт 31.03.2016 12:16

Вот мой код до сих пор

Public Sub FedExTracking()

Dim IE As Object
Dim ReturnValue As Object
Dim ProUrl As String
Dim RowCount As Integer
Dim PullText As String
Dim iCounter As Integer

Set IE = CreateObject("InternetExplorer.application")

RowCount = 0

Do While Not ActiveCell.Offset(RowCount, -1).Value = ""

ProUrl = "https://www.fedex.com/apps/fedextrack/?action=track&tracknumbers=" & ActiveCell.Offset(RowCount, -1).Value & "&locale=en_US&cntry_code=us"

With IE
    .Visible = True
    .Navigate ProUrl
    Do Until Not IE.Busy And IE.readyState = 4: DoEvents: Loop
End With


iCounter = 0
Do While iCounter < 8
    WaitHalfSec
    iCounter = iCounter + 1
Loop


set ReturnValue = IE.document.getElementsClassName("snapshotController_date.dest")(0)

'THIS LINE RETURNS RUN TIME ERROR "91" OBJECT VARIABLE OR WITH BLOCK VARIABLE NOT SET
PullText = ReturnValue.innertext

ActiveCell.Offset(RowCount).Value = PullText & "."

RowCount = RowCount + 1

Loop

IE.Quit
Set IE = Nothing

End Sub

Sub WaitHalfSec()
Dim t As Single
t = Timer + 1 / 2
    Do Until t < Timer: DoEvents: Loop
End Sub

Мне удалось найти и сохранить строку, кажется, до тех пор, пока я не пытаюсь добраться до внутреннего текста. Как мне узнать дату возврата в этой строке?

Чт 31.03.2016, 12:16

Любая помощь приветствуется!

2 ответа

Решение

Попробуйте это вместо этого:

ReturnValue = IE.document.getElementsByClassName("snapshotController_date.dest")(0).innerText

Несмотря на то, что при проверке имени класса появляется пробел, если вы посмотрите в проводнике DOM, вместо этого у него будет точка. Кроме того, это имя класса, а не идентификатор, поэтому вам нужно использовать getElementsByClassName() метод и использовать объект HTMLCollection, который он возвращает.

Я смог заставить это работать. Просто выкладываю ответ всем, кому это нужно.

Public Sub FedExTrackingWorking()
Dim ie As Object
Dim ProURL As String
Dim iCounter As Integer
Dim htmlColl As MSHTML.IHTMLElementCollection
Dim htmlInput As MSHTML.HTMLInputElement
Dim RowCount As Integer

RowCount = 0

Set ie = CreateObject("InternetExplorer.application")

Do While Not ActiveCell.Offset(RowCount, -1).Value = ""

ProURL = "https://www.fedex.com/apps/fedextrack/?action=track&tracknumbers=" & ActiveCell.Offset(RowCount, -1).Value & "&locale=en_US&cntry_code=us"

With ie
    .Visible = True
    .navigate ProURL
    Do Until Not ie.Busy And ie.readyState = 4: DoEvents: Loop
End With

iCounter = 0
Do While iCounter < 8
    WaitHalfSec
    iCounter = iCounter + 1
Loop

Set htmlColl = ie.document.getElementsByTagName("div")

For Each htmlInput In htmlColl
    If htmlInput.className = "snapshotController_date dest" Then
        ActiveCell.Offset(RowCount).Value = htmlInput.innerText
        Exit For
    End If
Next htmlInput

RowCount = RowCount + 1

Loop

ie.Quit
Set ie = Nothing

End Sub

Sub WaitHalfSec()
    Dim t As Single
    t = Timer + 1 / 2
        Do Until t < Timer: DoEvents: Loop
End Sub
Другие вопросы по тегам