Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Webbrowser
giovedì 23 ottobre 2008 - 15.32
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
gio 23 ott 2008 - 15:32
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
7.999
messaggi | Data Invio:
gio 23 ott 2008 - 16:27
>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
309
messaggi | Data Invio:
gio 23 ott 2008 - 16:52
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
309
messaggi | Data Invio:
gio 23 ott 2008 - 17:16
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
309
messaggi | Data Invio:
ven 24 ott 2008 - 17:03
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
Torna su
Stanze Forum
Elenco Threads
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 !