webForumDet fria alternativet

InternetExplorer.Application

6 svar · 330 visningar · startad av Qimen

QimenMedlem sedan juni 20015 009 inlägg
#1

Hej

Hur ska man gå till väga för att hämta information från en webbsida. Jag har kommit så långt att jag navigerat fram till sidan. Men sen får jag inte rätt på det längre. Sökt som tusan på både msdn och experts-exchange men utan resultat som hjälpt mig.

Texten jag vill hämta ligger i en div som heter oDIV2.

<DIV id="oDIV2">1000</DIV>

På msdn hittade jag detta om det är till någon hjälp.

nikoMedlem sedan juni 20022 599 inlägg
#2

Du får fram den med vanlig IE-DOM:

värdet = <din IE-instans>.Document.getElementById("oDiv2").innerText

Det som krånglar till det är att du förlorar intellisensen efter <din IE-instans>.Document.

QimenMedlem sedan juni 20015 009 inlägg
#3

Vet inte vad jag missat men jag får felmeddelandet:

Run-time error '-2147467259 (80004005)':
Method 'Document' of object 'IWebBrowser2' failed

Måste man deklarera något speciellt? Jag får samma felmedelande när jag försökte med http://www.webforum.nu/showthread.php?s=&postid=779513#post779513

nikoMedlem sedan juni 20022 599 inlägg
#4

Jo, men det felet får du för att du remmat bort Sleep:en och dokumentet aldrig hinner laddas, eller hur?

Gör så här istället:

Lägg till under Project -> References

1. Microsoft Internet Controls
2. Microsoft HTML Object Library

Kör sen:

    Dim ie As InternetExplorer
    Set ie = New InternetExplorer
    ie.Navigate2 "http://<din sida>"
    Do While ie.Busy
    Loop
    Dim doc As HTMLDocument
    Set doc = ie.document
    MsgBox doc.getElementById("oDiv2").innerText
    ie.Quit

Tack vare referenserna har du nu full intellisense.

QimenMedlem sedan juni 20015 009 inlägg
#5

Mjo det stämmer nog. :r
Fick det inte att funka med MsdBoxen men när jag körde det och la det i en variabel och skrev ut den i en label så gick det bra.

Tack än en gång niko! :bire

QimenMedlem sedan juni 20015 009 inlägg
#6

En följfråga, kan man göra så att om den misslyckas öppna sidan så får man ett felmeddelande eller gör något annat. Om man kanske lägger det i en if sats och om ie.Navigate2 är true (inte så enkelt men princip) så går den vidare annars kastar den felmeddelande.

nikoMedlem sedan juni 20022 599 inlägg
#7

Visst. Man kan göra mycket mer om man använder events:

Private [b]WithEvents[/b] ie As InternetExplorer

Private Sub Command1_Click()
    ie.Navigate2 "http://<dinurl>"
End Sub

Private Sub Form_Load()
    Set ie = New InternetExplorer
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ie.Quit
    Set ie = Nothing
End Sub

Private Sub ie_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Dim doc As HTMLDocument
    Set doc = ie.document
    MsgBox doc.getElementById("oDiv2").innerText
End Sub

Private Sub ie_NavigateError(ByVal pDisp As Object, URL As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean)
    Cancel = True
    MsgBox "Fel: " & StatusCode
End Sub

Statuskoderna för felen hittar du här.

133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)