2016-05-10 1 views
2

Je regarde cette page ->https://www.fedex.com/apps/fedextrack/?action=track&tracknumbers=671299425542&locale=en_US&cntry_code=usComment pourrais-je tirer ce texte

Et je veux revenir à la date de livraison Jeu 31.03.2016 24:16

Voici mon code si loin

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 

j'ai pu se localiser et stocker la ligne, il semble aussi longtemps que je ne suis pas tyring pour se rendre à l'InnerText. Comment pourrais-je retourner la date sur cette ligne?

< div class = "snapshotController_date.dest"> Jeu 31.03.2016 12:16 </div>

Toute aide est appréciée!

+1

il est getElementByID –

+0

Et il ne va pas être un espace ' "snapshotController_date dest"'. –

+0

Je n'étais pas sûr parce que quand vous faites défiler dessus c'est date.dest, mais le texte actuel a un espace ou au moins il ressemble à lui. Merci quand même. J'ai corrigé cela et je suis toujours en train de retourner la même erreur. – sdrloveshim

Répondre

2

Essayez ceci:

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

Même si le nom de la classe semble avoir un espace lorsque vous inspectez, si vous regardez dans l'explorateur DOM il a une période, à la place. Il s'agit également du nom de la classe et non de l'ID. Vous devez donc utiliser la méthode getElementsByClassName() et utiliser l'objet HTMLCollection qu'il renvoie.

+0

Pourriez-vous m'expliquer ce que vous entendez par "utiliser l'objet HTMLCollection qu'il retourne". J'ai vu d'autres exemples de choses comme HTMLObjectElement, mais cela ne semble pas agir comme un type sur mon Excel. J'ai une bibliothèque d'objets html dans mes références. – sdrloveshim

+0

La méthode 'getElementsByClassName()' renvoie une collection _ d'éléments (un peu comme un tableau) car il peut y avoir plus d'un élément qui a cette classe. Pour cette raison, vous devez parcourir la collection et trouver l'élément que vous recherchez - ou dans ce cas, il ressemble au premier élément de cette classe, donc je l'ai accédé directement en utilisant '(0)' après la méthode. Est ce que ça aide? –

+0

Cela a du sens, merci. Je modifie la question d'origine pour une autre erreur renvoyée sur la même ligne. – sdrloveshim

0

J'ai réussi à faire fonctionner cela. Il suffit de mettre la réponse à la portée de tous ceux qui en ont besoin.

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