PDA

View Full Version : [VB]STRANO COMPORTAMENTO CON WEBBROWSER


SUPERALEX
09-10-2009, 14:37
Allora ho un programmino che naviga su internet riempie dei campi con dei valori e schiaccia bottoni molto facile:
Sub azione()
On Error Resume Next
WebBrowser1.Navigate("http://www.sito.it")
wait()
WebBrowser1.Document.All("campo_1").InnerText = "122"
WebBrowser1.Document.All("campo_2").InnerText = "1"
WebBrowser1.Document.All("go").InvokeMember("click")
End Sub

con wait:
Sub wait()

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

End Sub

il problema è questo prima si logga con user e pass dopodichè viene invocata azione che va alla pagina desiserata inserisce 2 valori in altrettanti campi e schiaccia un bottone di tipo submit..ma una volta caricata la pagina indicata nn fa queste cose..ma la cosa strana è che se elimino il riempimento dei campi il bottone viene schiacciato e se elimino il bottone i campi vengono riempiti..ma nn fa le 3 cose insieme e nn so perchè..in particolare facendo un pò di prove ho notato che è il riempimento del secondo campo che poi nn fa cliccare il bottone

MarcoGG
10-10-2009, 12:50
Può essere anche quello un problema di tempistica. Le operazioni di scrittura possono avere un loro tempo di esecuzione, perciò una o più di esse può non andare a buon fine. Già provato così ? :

Sub azione()
On Error Resume Next
WebBrowser1.Navigate("http://www.sito.it")
wait()
WebBrowser1.Document.All("campo_1").InnerText = "122"
wait()
WebBrowser1.Document.All("campo_2").InnerText = "1"
wait()
WebBrowser1.Document.All("go").InvokeMember("click")
End Sub

Inoltre, se è VB.NET, rimpiazza "On Error" con un Try Catch... ;)

SUPERALEX
10-10-2009, 15:35
Può essere anche quello un problema di tempistica. Le operazioni di scrittura possono avere un loro tempo di esecuzione, perciò una o più di esse può non andare a buon fine. Già provato così ? :

Sub azione()
On Error Resume Next
WebBrowser1.Navigate("http://www.sito.it")
wait()
WebBrowser1.Document.All("campo_1").InnerText = "122"
wait()
WebBrowser1.Document.All("campo_2").InnerText = "1"
wait()
WebBrowser1.Document.All("go").InvokeMember("click")
End Sub

Inoltre, se è VB.NET, rimpiazza "On Error" con un Try Catch... ;)

si si ho provato a mettere wait ovunque ma la wait è x il caricamento pagina lì si tratta solo di scrivere un campo credo sia anche inutile..

MarcoGG
11-10-2009, 07:59
si si ho provato a mettere wait ovunque ma la wait è x il caricamento pagina lì si tratta solo di scrivere un campo credo sia anche inutile..

Non è detto che sia inutile. Se accedi al Document troppo velocemente, mentre un processo di scrittura è ancora in fase d'esecuzione, potrebbe verificarsi il problema che hai descritto.
Se puoi posta il link, oppure il codice html delle pagine interessate, in modo che si possa fare un test in locale...