Как бы я потянул этот текст
Я просматриваю эту веб-страницу -> 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
Мне удалось найти и сохранить строку, кажется, до тех пор, пока я не пытаюсь добраться до внутреннего текста. Как мне узнать дату возврата в этой строке?
Любая помощь приветствуется!
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