Webbrowser

giovedì 23 ottobre 2008 - 15.32

ilario Profilo | Senior Member

ciao

ho un componente webbrowser gli assegno un urlo e cerco un link se è presente e lo clicco

Dim i As Integer = 0

For Each Link As HtmlElement In WebBrowser1.Document.Links
If Link.OuterHtml.Contains("www.nomesito.it") = True Then
WebBrowser1.Document.Links(i).InvokeMember("Click")
Exit Sub
End If

i += 1
Next

e fin qui tutto bene lo trova e mi apre la pagina

per chiuderla procedo così


Dim procs As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("IEXPLORE")


For Each proc As System.Diagnostics.Process In procs

If proc.MainWindowTitle.Contains("nomesito") Then

proc.Kill()

End If
Next

e anche questo funziona

il mio problema è se le due cose le faccio separate funzionano, me se voglio automatizzare quindi inserirle nella stessa sub
funziona la prima e non la seconda(chiusura)

la pagina del link si apre in una finestra esterna dal programma

ciao
ilario

Brainkiller Profilo | Guru

>il mio problema è se le due cose le faccio separate funzionano,
>me se voglio automatizzare quindi inserirle nella stessa sub
>funziona la prima e non la seconda(chiusura)

Ipotizzo che quando simuli il click e apre una nuova istanza di IEXPLORE.EXE l'istanza non è stata ancora creata e tu hai già fatto il foreach quindi non riesce a vederla. Dovresti mettere il tutto in un do..while con un Thread.Sleep(1000) in modo che controlla ogni secondo se l'istanza è presente e se c'è la killa. Una volta killata esce dal ciclo.
ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

ilario Profilo | Senior Member

ho provato a inserire uno sleep di due minuti , così sono sicuro che appare la pagina explorer,
ma non funziona

è come se all'apertura della pagina, la mia form perde il focus e non continua nell'esecuzione della sub
ho provato a inserire semplicemente un messagebox dopo l'apertura e in effetti non mi visualizza alcun messaggio

provo anche a inserire un do while

ilario Profilo | Senior Member

intanto ho trovato un errore nel codice

nel ciclo for ho inserito un exit sub anzichè exit for ed era per questo che non continuava il codice

sarà una cosa semplice ma mi potresti dire come inserirlo in un do while, perchè non riesco a farlo funzionare

grazie

ilario Profilo | Senior Member

ciao

ho risolto dividento le varie fasi apertura, chiusure ecc..

se inserivo tutto in una sub non capisco perchè non funzionava ora è ok

posto il codice

Private Sub CaricaPagina(ByVal WebbrowserName As WebBrowser, ByVal nomesito As String, ByVal Title As String)

Dim chiuso As Boolean = False
Dim nrChiusura As Integer = 0

Try
WebbrowserName.Navigate(New Uri(nomesito))


Do While WebbrowserName.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
Loop

'cerca nella pagina il link e apri pagina

If CercaEApri(WebbrowserName, nomesito) = True Then

' chiudi la pagina aperta

Do While chiuso <> True Or nrChiusura = 2 ' se si prolunga troppo cerco di chiuderla solo per un tot di vote
chiuso = ChiudiPagine(Title)
nrChiusura += 1
Loop


End If


Catch ex As System.UriFormatException
Return
End Try

End Sub


Private Function CercaEApri(ByVal WebBrowserName As WebBrowser, ByVal NameSito As String) As Boolean
' restituisce se apre una nuova pagina explorer
CercaEApri = False

Dim i As Integer = 0

For Each Link As HtmlElement In WebBrowserName.Document.Links

If Link.OuterHtml.Contains(NameSito) = True Then
WebBrowserName.Document.Links(i).InvokeMember("Click")
If Link.OuterHtml.Contains("blank") Then
CercaEApri = True
End If

Exit For

End If
i += 1
Next



End Function

Private Function ChiudiPagine(ByVal title As String) As Boolean

ChiudiPagine = False

System.Threading.Thread.Sleep(10000)


Dim procs As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("IEXPLORE")

For Each proc As System.Diagnostics.Process In procs
If proc.MainWindowTitle.Contains(title) Then
proc.Kill()
ChiudiPagine = True
Exit For

End If

Next

End Function

grazie mille
ciao
Ilario
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5