Italian Accesso particolare a pagina Web protetta

AlpVir

Well-Known Member
Licensed User
Longtime User
Ho realizzato un programma (scritto in VB6) che consente di accedere ad una pagina Web protetta da username e password e questo senza doverli conoscere. Ovviamente password e username sono memorizzate nell'eseguibile, opportunamente crittate.
Adesso vorrei fare la stessa cosa con il B4A. Ho trovato un ottimo esempio, che funziona perfettamente con gmail.com (immettendo i miei personali parametri) ma che non funziona con la pagina che mi interessa (LiveData - Netsens S.r.l.).
Questa è una sintesi della suddetta pagina
B4X:
<form method="POST" action="login.php" accept-charset="UTF-8" enctype="application/x-www-form-urlencoded" id="login_form_1" onsubmit="return user_login();">
<input Type="text" name="username_digit" id="login_input_1"  />
<input Type="password" name="password_digit" id="login_input_2" />
<input Type="submit" value="Accedi" id="login_input_3"  />
<input Type="hidden" name="username" id="login_input_4"  />
<input Type="hidden" name="password" id="login_input_5"  />
<input Type="hidden" name="m" value="1" />
</form>

Mi sembra di aver inserito i nomi della form e degli input nel modo corretto ma non riesco a trovare l'errore. Gli <INPUT> non vengono popolati ed il SUBMIT non viene eseguito.
Ecco dove ho trovato l'esempio
http://www.b4x.com/forum/basic4android-updates-questions/22006-how-load-url-username-password.html
ed anche
http://www.b4x.com/forum/basic4android-updates-questions/13272-sending-keystrokes-webview.html#post74960

Qualcuno può aiutarmi ?

B4X:
'  Utilizza la libreria WebViewExtras

Sub Process_Globals
End Sub

Sub Globals
   Dim WebView1 As WebView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   WebView1.Initialize("WebView1")
   Activity.AddView(WebView1, 0, 0, 100%x, 100%y)
   WebView1.LoadUrl("http://mobile.netsens.it/login.php")
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub WebView1_PageFinished (Url As String)
      Dim Javascript As StringBuilder
      Javascript.Initialize

      Javascript.Append(" document.forms.login_form_1.username_digit.value='xxxxxxxx';")    
      Javascript.Append(" document.forms.login_form_1.password_digit.value='yyyyyyyyyyyy';")       
   '   Javascript.Append("document.forms.login_form_1.username.value='';")
   '   Javascript.Append("document.forms.login_form_1.password.value='';")
   '   Javascript.Append("document.forms.login_form_1.m.value='1';")
      Javascript.Append(" document.forms.login_form_1.submit();") 
      
      Dim WebViewExtras1 As WebViewExtras
      WebViewExtras1.executeJavascript(WebView1, Javascript.ToString)
End Sub
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Risolto !
Bisognava ANCHE inserire username e password negli altri due campi, nonostante uno spezzone di codice Javascript facesse pensare il contrario.
B4X:
Javascript.Append("document.forms.login_form_1.username.value='xxxxxxxx';")
Javascript.Append("document.forms.login_form_1.password.value='yyyyyyyyyyyy';")
 

Spinter

Active Member
Licensed User
Longtime User
Ho fatto un po di ricerche forse e meglio cosi' molto piu' semplice!
Devo trovare ancora come fare il click!

B4X:
'Activity module
Sub Process_Globals

End Sub

Sub Globals
   Dim WebView1 As WebView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   WebView1.Initialize("WebView1")
   Activity.AddView(WebView1, 0, 0, 100%x, 100%y)
   WebView1.LoadUrl("http://mobile.netsens.it/login.php")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub WebView1_PageFinished (Url As String)
Dim WebViewExtras1 As WebViewExtras
WebViewExtras1.executeJavascript(WebView1, "document.getElementsByName('username_digit')[0].value= 'pippo';")
WebViewExtras1.executeJavascript(WebView1, "document.getElementsByName('password_digit')[0].value= 'caio';")      
End Sub
 

giannimaione

Well-Known Member
Licensed User
Longtime User
Con questo tipo di programmi magari la value di username e password è meglio metterle come variabili in process per poterle criptare.
Ciao Timo,

per favore, puoi fare un esempio.

Buone feste,
 

Spinter

Active Member
Licensed User
Longtime User
Intendi in locale? Tipo 'NomeBottone_Click' ?

Dim WebViewExtras1 As WebViewExtrasWebViewExtras1.executeJavascript(WebView1, "document.getElementsByName('username_digit')[0].value= 'pippo';")WebViewExtras1.executeJavascript(WebView1, "document.getElementsByName('password_digit')[0].value= 'caio';")

simulare da codice l'evento clic! con executeJavascript!

con Javascript.Append si simula cosi:
Javascript.Append(" document.forms.login_form_1.submit();")
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Riepilogando, qui c'è il nucleo del programma :

B4X:
Sub WebView1_PageFinished (Url As String)
   Dim Javascript As StringBuilder
   Javascript.Initialize
      Javascript.Append("document.forms.login_form_1.username_digit.value='" & Username & "';")    
Javascript.Append("document.forms.login_form_1.password_digit.value='" & Password & "';")  
   Javascript.Append("document.forms.login_form_1.submit();") 
   Dim WebViewExtras1 As WebViewExtras
   WebViewExtras1.executeJavascript(WebView1, Javascript.ToString)
End Sub

Dettagli :
- login_form_1 è il nome del <FORM>
- username_digit è il nome dell'elemento <INPUT>
- il "click" viene fatto dal submit, come indicato nel mio primo intervento
- username e password devono essere crittati in qualche modo
Ovviamente il codice è da adattare alla specifica situazione. Se la pagina HTML cambia (in qualche elemento all'interno di <FORM></FORM> non funziona più nulla e questo è altrettanto ovvio.
Adesso voglio fare la stessa cosa in un'applet, ma questo è OT ......
 
Top