[VB.NET] Source ophalen van pagina in AxWebBrowser-control

Pagina: 1
Acties:

  • DarthPlastic
  • Registratie: Augustus 2005
  • Laatst online: 16-10 14:32
Op een form (VB.NET 2003) heb ik een WebBrowser-control geplaatst, dat met een aantal scripts bestuurd wordt om eerst in te loggen op een switch, en daarna naar een statuspagina te navigeren.

Zodra de pagina geladen is, wil ik de source hiervan opvragen om deze in een textbox te plaatsen.

Het probleem is dat er eerst ingelogd moet worden op de pagina (via een POST-actie een formulier versturen) voordat de andere pagina's toegankelijk zijn, deze login is gekoppeld aan een sessie-ID in een cookie.
De source kan dus niet apart gedownload worden, omdat deze alleen via de AxWebBrowser te zien is omdat die een actieve sessie open heeft staan.

Na wat zoeken heb ik wat trucs met de mshtml-libary en AxWebBrowser.Document uitgehaald, ik heb de source kunnen bekijken, maar hij heeft alleen de body geopend, terwijl ik de volledige source moet hebben (het gaat om enkele variabelen uit een script wat in de head staat).
Dit is mijn code:
Visual Basic .NET:
1
2
3
4
5
6
' loginactie
 AxWebBrowser1.Navigate("http://" & tbIP.Text & "/tgi/login.tgi", , , postDataBytes)

' na login, bij AxWebBrowser1.DocumentComplete-events: 
Dim html As mshtml.HTMLDocument = AxWebBrowser1.Document
tbSource.Text = html.body.innerHTML


"html.body.outerHTML" heb ik ook al geprobeerd, dit is dezelfde body-code, maar dan met <body> en </body>-tags, maar nog steeds geen head dus.

Wie weet raad?
Als het overigens zonder AxWebBrowser mogelijk is hoor ik dit graag, deze wordt nu alleen gebruikt om het loginform te posten. Als er een losse post-actie plaats kan vinden, waarna de juiste pagina met de sessiesleutel wordt opgevraagd, is het het beste, maar hiermee ben ik niet ver gekomen...

Owner SuitIT, https://www.suitit.nl


  • DarthPlastic
  • Registratie: Augustus 2005
  • Laatst online: 16-10 14:32
Weet iemand hier iets vanaf?

Ik ben helaas nog niet veel verder gekomen, handmatig POSTen is enorm lastig, en de AxWebBrowser laat zijn code niet los...

Owner SuitIT, https://www.suitit.nl


  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 21:22

CodeIT

Code IT

Als je de IE activex alleen gebruikt voor het inloggen op een site (en het dus niet aan je gebruiker laat zien) zou je beter kunnen kijken naar Webrequest en webresponse in de system.net namespace.
Voorbeeldje met POST hier: http://dev.kanngard.net/Permalinks/ID_20040422161020.html

  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Zelf inloggen is niet zo lastig als het lijkt hoor ;) Volgens mij krijg je de eerste keer dat je een pagina van de server bezoekt een cookie toegewezen. Deze moet je vervolgens bij je vervolgacties meegeven aan de server zodat hij weet wie je bent.

In mijn oude VBscript/XMLDom scripts gaat het ongeveer alsvolgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sessionID = ""
login(" http://server.com/login.asp" )
sourceVanVolgendePagina = getpage(" http://server.com/geheim.asp" )
function login(loginURI)
    xmlhttp.open "GET", loginURI, false
    xmlhttp.setrequestheader "User-Agent", "MSIE 6.0"
    xmlhttp.send()
    sessionID = xmlHttp.getResponseHeader("set-Cookie") 
end function
function getPage(URI)'request een file
    xmlhttp.open "GET", URI, false
    xmlhttp.setrequestheader "User-Agent", "MSIE 6.0"
    xmlhttp.setRequestHeader "cookie", sessionID
    xmlhttp.send()
    getPage = xmlhttp.responsetext
end function


Moet je uiteraard wel met system.net classes doen als je met vb.net gaat werken, maar het opvangen en gebruiken van het cookie zal niet veel verschillen ;)

kaart != map && bottel != fles
Wacht op antwoord