Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[VB6] webbrowser navigatie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,
tot zover mijn 2de post op tweakers :+

Mijn bedoeling is dus om van de ene webpagina naar de andere te gaan en overal wat gegevens af te halen.

Het verloop van het programma dus.

Ga naar de main pagina
" wacht tot browser de pagina volledig heeft geladen ( DocumentComplete)
Ga naar de fullscan pagina ( fullscan is maar een naam )
" wacht tot browser de pagina volledig heeft geladen ( DocumentComplete)
Haal een hoop gegevens af
enz ....

Nu het probleem:
Mijn programma crashed. Reageert niet meer.
Wat denk ik dat ik verkeerd gedaan heb ?
Ik gebruik een do loop om te wachten tot de browser klaar is met de pagina te laden. Maar tegen 3.6Ghz zijn dat wel veel loopjes denk ik.

Of is er misschien een beter manier te wachten tot DocumentComplete fired ?
Ik heb echter een heel simpel form.
Een textbox om de mainurl in te geven. Een knop om de hele santeboetik te laten beginnen en natuurlijk een webbrowser element.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public ready As Byte





Private Sub start_Click()
Dim mainklaar As Byte

ready = 0
MsgBox (Me.mainurl)
fullscanlink = Replace(Me.mainurl, "main.php", "lrscan.php?sector=*")
MsgBox (fullscanlink)
mainklaar = 1


Do
If ready = 1 And mainklaar = 1 Then
WebBrowser1.Navigate2 (Me.mainurl)
mainklaar = 2
ready = 0
End If
WebBrowser1.Navigate2 (fullscanlink)
If ready = 1 And mainklaar = 2 Then
mainklaar = 3
ready = 0
End If


Loop











End Sub
Private Sub object_DocumentComplete( _
    ByVal pDisp As Object, _
    ByVal URL As Variant)
MsgBox ("called")
ready = 1
End Sub


Een probeerseltje van mij dat radeloos crashed bij het ingeven van de main pagina. Bij debugging geraak ik echter wel op de 2 gewenste paginatjes en fired de documentcomplete ook enkel in het begin.

Ik weet dat mijn code niet de ordelijkste is en dat er wel fouten in zullen zitten. Ik ben dan ook nog maar heel even bezig met VB.

Het afhalen van de html paginas wou ik doen met
Webbrowser1.Document.inner.Text en dan dit in een string plaatsen en er de nodige dingen uithalen. Of is hier ook iets beters voor ?

Ik hoop dat de modjes niet teveel commentaar hebben op deze post ? Ik had nochtans de quistart gelezen >:)

Groetjes,

Jan Cools

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Ehm, kent VB6 geen events op het webbrowser-control? Dan voert hij iets uit zodra hij is geladen, dat lijkt me effectiever dan een infinite loop...

We are shaping the future


  • Comgenie
  • Registratie: Oktober 2005
  • Laatst online: 30-11 23:28

Comgenie

Soms heb je dat

Waarom plaats je die dingen uit de Do Loop niet gewoon in de
Private Sub object_DocumentComplete

En anders een DoEvents de regel na Do zetten. Dat werkt ook, maar zo'n loop op deze manier gebruiken is over het algemeen nooit echt goed. Het maakt niet uit hoe snel je pc is, hij gaat gewoon zo snel mogelijk en zou dus net zosnel op een pentium 1 vast lopen als op een 3,6 Ghz pctje.

[ Voor 33% gewijzigd door Comgenie op 07-08-2007 23:36 ]

No animals were harmed in the making of this comment.


Verwijderd

Topicstarter
ok, dit ga ik alvast uitproberen, ik laat morgen iets weten.
Jan Cools _/-\o_

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Ik heb even VB6 opgevuurd en er een webbrowsercontrol in gestopt
(Microsoft Internet Controls)

code:
1
2
3
4
5
Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
'//stop hier je code
'//even als voorbeeld, als het programma klaar is geeft ie een msgbox met "klaar"
msgbox "klaar"
End Sub


knopje:
code:
1
2
3
Private Sub Command1_Click()
WebBrowser1.Navigate2 ("www.tweakers.net")
End Sub


Als ik nu op command1 druk krijg ik netjes de melding "klaar" als de pagina helemaal geladen is.

(letop het msgbox event heeft voorang op het visueel tekenen van de webpagina, dus pas als je op Ok klikt zie je de pagina, maar daarvoor was ie al klaar :) )

Dit lijkt me de netste oplossing die het minste resources vreet :) succes ermee!

[ Voor 5% gewijzigd door roy-t op 08-08-2007 10:03 ]

~ Mijn prog blog!


Verwijderd

Topicstarter
Ja, dat lukte mij ook best. Maar ik moet meerdere paginas kunnen laden dus moet ik na het eerste adres wachten tot de pagina geladen is, naar de volgende pagina gaan en wachten tot die geladen is. Ik denk dat ik dan een variable moet setten ofzo. Maar dat blijk in die sub niet te werken .

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 08 augustus 2007 @ 10:42:
Maar dat blijk in die sub niet te werken .
Nogal wiedes. Verdiep je eens in scoping ;)
M.a.w.: maak een variabele met een grotere scope dan in die specifieke sub ;) *HINT*

[ Voor 14% gewijzigd door RobIII op 08-08-2007 10:58 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
RobIII schreef op woensdag 08 augustus 2007 @ 10:57:
[...]

Nogal wiedes. Verdiep je eens in scoping ;)
M.a.w.: maak een variabele met een grotere scope dan in die specifieke sub ;) *HINT*
Dat dus ;) trouwens de sub geeft ook een url mee "URL As Variant" misschien dat je daar nog iets mee kan (vreemd dat het een Variant is btw)

En zet gewoon helemaal bovenin *buiten de subs* een variabele die je als je bijvoorbeeld op een knop drukt reset naar zijn eerste waarde (ook resetten op form_load btw)

~ Mijn prog blog!


Verwijderd

Topicstarter
Is het normaal als je je code debugt dat er dan geen NavigateComplete2 komt ?

Scoping:
Ik heb toch een Public boolean variable gedeclared ? Deze is toch toeganglijk voor alle subs ?
Nog een probeerseltje dat in een infinite loop uitdraait :
code:
1
2
do
loop until loaded = True

Waarbij loaded natuurlijk de public variable is.
Volges mij word die NavigateComplete2 gewoon weg niet getriggerd.
Met debugging alle sins niet , en de computer loopt vast op de infinite loop.
Iemand ideeen ?

Verwijderd

Topicstarter
Ok, eidenlijk wat vooruitgang.
Het werkt nu al bijna. Ik kan al naar 1 pagina gaan met devolgende code.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form_Load()
WebBrowser1.Navigate2 ("http://www.google.be")
End Sub

Private Sub start_Click()

MsgBox (Me.mainurl)
WebBrowser1.Navigate2 (Me.mainurl)
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
MsgBox "klaar"
End Sub


Maar echter 2 paginas na mekaar openen lukt me niet. Graag hulp

Verwijderd

Ik lees op vele plekken dat er ook een WebBrowser1.Navigate is...
Kun je het daarmee niet beter proberen?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 08 augustus 2007 @ 18:52:
Ok, eidenlijk wat vooruitgang.
Het werkt nu al bijna. Ik kan al naar 1 pagina gaan met devolgende code.
Daarom moet je een "state variabele" bijhouden met de juiste scope waarin je bijhoudt waar je gebleven bent. Daarna werk je in de WebBrowser1_NavigateComplete2 je state variabele bij en start je de volgende actie. Da's toch geen rocket science?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Verwijderd schreef op donderdag 09 augustus 2007 @ 11:32:
Ik lees op vele plekken dat er ook een WebBrowser1.Navigate is...
Kun je het daarmee niet beter proberen?
Zo ver ik weet / kan zien in MS Visual Studio 6, is er alleen een NavigateComplete2 en Navigate2

De TS heeft me even op msn toegevoegd zie ik net, enige oplossingen / voorbeeld code zal ik/hij hier posten zodat anderen er ook wat aan hebben :)

Edit: heb de TS even geholpen via msn en we zijn tot deze code gekomen die goed werkt en geen vervelende loopjes heeft, denk ook dat de code zo wat beter uitbreidbaar is :)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Dim iReady As Integer 'let op nu een integer (getal)
Dim sFirstPage As String 'de eerste pagina waar je naar toe wil
Dim sSecondPage As String 'tweede

Private Sub Form_Load()
iReady = 999 'betekend dat het programma nog niet gestart is
End Sub

Private Sub start_Click()
iReady = 0 'zet iReady weer op 0
sFirstPage = "www.google.be"
sSecondPage = "www.youtube.com"
WebBrowser.Navigate2 sFirstPage
End Sub

Private Sub WebBrowser_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
'als het programma net start zegt hij ook "NavigateComplete2" dus dat even onderscheppen
If iReady = 999 Then Exit Sub
iReady = iReady + 1
If iReady = 3 Then Exit Sub
Select Case iReady
    Case 1
        MsgBox "Klaar met: " & sFirstPage
    Case 2
        MsgBox "Klaar met: " & sSecondPage
End Select
NextPage
End Sub

Private Sub NextPage()
WebBrowser.Navigate2 sSecondPage
End Sub

[ Voor 53% gewijzigd door roy-t op 09-08-2007 13:17 ]

~ Mijn prog blog!

Pagina: 1