Newsgroup: it.comp.lang.visual-basic
Titolo: WebBrowser control

Dunque, nel NG microsoft.public.vb.controls non mi hanno saputo rispondere.
Non lo dico per sfidare nessuno, perņ mi aspettavo che quello era il NG
giusto per la mia domanda.
Ecco dunque che mi affido alla conoscenza collettiva di voi tutti.
In un form utilizzo un controllo webbrowser per andare a cercare dei dati da
certe pagine web. Perņ devo prima fare il login.
La pagina di login non accetta il nome utente e password direttamente
nell'URL (i.e. 
https://nome:p...@www.miodominio.com/login.php
) dunque devo
trovare un modo per riempire i campi e premere il bottone di submit. Avevo
pensato di riempire il buffer della tastiera con i caratteri appropriati,
perņ non riesco a posizionarmi sul primo campo.
Una sezione della pagina di login segue :
  <td height="10%" class="f10-0">&nbsp;&nbsp;User Name:<BR>
  &nbsp;&nbsp;<input type="text" name="UserLogin" value="">&nbsp;&nbsp;<BR>
  <BR>
  &nbsp;&nbsp;Password:<BR>
  &nbsp;&nbsp;<input type="password" name="UserPasswd">&nbsp;&nbsp;<BR>
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
      <tr><td class="f8-0" align="right" valign="center" height=40>
        <input type="submit" value="Log In">&nbsp;&nbsp;&nbsp;
      </td></tr>
Ho cercato di usare WebBrowser1.PutProperty ma non so se sono sulla buona
strada.
TIA
Sal


Non e' facile, poiche' dipende dalla pagina nella quale vai a fare il login:
I casi sono vari:
- La pagina html accetta i dati di user  e password con method="get"
- La pagina html accetta i dati di user  e password con method="post"
- nel primo caso puoi direttamente scrivere nel tuo programma:
webbrowser1.navigate
http://dominio/nomepagina_a_cui_punta_il_form.asp_o.cgi_o_quelloche_sia?user
=nomeuser&password=miapasswd&...
come vedi devi scrivere tutti i campi e assegnare loro i valori che
inseriresti manualmente, compresi quelli di tipo "hidden".
Poi nella sub che va in azione quando finisce il download (evento
webbrowser1.navigatecomplete) vai ad analizzare il contenuto della variabile
webbrowser1.document.body.innertext (o innerhtml) e ne fai quello che vuoi.
- nel secondo caso puo' anche funzionare cio'che abbiamo detto nel primo
caso, ma se non funziona allora crea un file  html sul tuo pc che contiene
lo stesso codice html del form che devi visitare, facendo attenzione a
scrivere action=indirizzocompleto_di_dominio, nel senso che nell'html che
leggi dal sito remoto puo' esserci anche solo il nome del file
(action="nomefile") mentre tu devi inserire
action="
http://dominiocompleto.xx/nomedelfile
". E inoltre assegna ai campi i
valori di login e password, cioe' dove c'e' <input type=text name=user
value=""> tu inserisci per value il valore di user cioe' user="nomeuser"
cosi' per password ecc...e per i campi hidden, per i quali e' sicuramente
gia' specificato il valore da impostare.
Una volta che vedi che con IE funziona, cioe' che carichi la pagina dal tuo
pc e vedi che premendo il tasto submit fa il login, significa che hai
risolto il problema.
Infatti non resta che inserire nell'html un po' di codice per submit
automatico tipo:
<SCRIPT LANGUAGE="JavaScript">
setTimeout('document.nomeform.submit()',1000);
<!--
e vedrai che facendo doppio click sul file avrai il login automatico alla
pagina interessata.
Ora con un wbbrowser control vai a navigare proprio sul file appena creato
settando webbrowser1.navigate "c:\nometuofile.htm" e questo dopo un secondo
fara' il login. Alla fine dovresti avere tutto il contenuto della pagina
remota sempre nella variabile
webbrowser1.navigatecomplete.document.body.innerhtml (o innertext)
e puoi farne quello che vuoi.
Il problema e' invece nel caso in cui i dati che ti interessano non appaiono
subito dopo il login perche' magari si trovano in un'altra pagina.
In questo caso puoi inserire un altro webrowser (non utilizzare lo stesso
webbrowser poiche' gli eventi NavigateComplete andrebbero in conflitto e in
loop) oppure puoi inserire vari oggetti di tipo Inet sulla  stessa Form di
VB ognuno dei quali va alla sua pagina specifica.
Anche se il sistema remoto setta cookies sul tuo pc non si accorge che le
pagine vengono richieste da controlli webbrowser diversi e dopo il login del
primo webbrowser ti da' libero accesso anche da altri controlli webbrowser o
Inet.
In MSDN si dice che gli oggetti Inet hanno la possibilita' di navigare nei
form html come Get o Post, ma io nemmeno in locale sono riuscito ad
utilizzare un Post.
Michelangelo
Per alcuni:
Ho scritto dopo il quoting...va bene?

 wrote in message
news:9rgfvo$9rt$1...@newsreader.mailgate.org...

Michelangelo,
(anche a me la "netichetta" di scrivere dopo il quoting mi sta sulle pa**e,
ma tant'é, per quieto vivere.....  ;-))
Grazie per le tue informazioni, ci lavorerò sopra. Giusto un'altra
informazione, la pagina dove devo fare il login ha questo codice all'inizio
:
<html>
<head>
<link rel="stylesheet" href="/q.css" type="text/css">
</head>
<body bgcolor="#FFFFFF">
  <form method="post" action="user_login.php" target="_top">
<!-- Do not use the GET method with UserLogin and UserPasswd in the URL, it
won't work
and it is not secure -->
<INPUT TYPE=hidden NAME="req" VALUE="">
...........
Come vedi non vogliono che io faccia un GET.
Ciao
Sal

 Come vedi non vogliono che io faccia un GET.
Devono esserci pure gli "Inpute type" per User e password e se sono
UserLogin e UserPasswd allora
comincia a vedere se con IE funziona
http://dominio.
..../user_login.php?UserLogin=miologin&UserPasswd=miapassword
&req=
Se funziona che ti frega che non e' sicuro? Certo se si tratta di cose
importanti tipo un collegamento con banca allora ok non usere il get.
Intanto fammi sapere se funziona semplicemente con IE e se riesci a entrare.
Miche

 wrote in message
news:9rhclc$ed2$1...@newsreader.mailgate.org...

Vediamo di spiegarci meglio.
Io NON ho il controllo sulla pagina di login. Quello é un sito su cui io ho
un accesso e basta. Non posso modificare niente. Ed é effettivamente un sito
dove ci sono certe informazioni molto confidenziali.
Avevo già provato quello che mi suggerisci (con i nomi giusti dei campi) e
non funzia. Il nome dell'user appare nel campo UserLogin ma non il Password.
Mi domando se non c'é un modo per farlo mettendo i caratteri giusti nel
buffer del keyboard, ma non riesco a posizionarmi su nessun campo per farlo.
Grazie
Sal

 Sal
se ti appare un campo User e un campo password nell'html ci deve essere per
forza.
Mandami tutto l'html compreso tra <form> e </form> oppure dimmi qual'e'
questa pagina di login anche senza che io conosca un account di accesso.
Michelangelo


Quello che segue é la pagina al completo. Comunque il link é questo :
https://wwwX.usX.qualysX.coXm/foX/loginX.php
Rimuovi tutte le X maiuscole.
Fai attenzione, é gente espertissima nei metodi di intrusione e hacking. (io
ho un accesso legale)
Grazie moltissimo per il tuo aiuto
Sal
<html>
<head>
<link rel="stylesheet" href="/q.css" type="text/css">
</head>
<body bgcolor="#FFFFFF">
  <form method="post" action="user_login.php" target="_top">
<!-- Do not use the GET method with UserLogin and UserPasswd in the URL, it
won't work
and it is not secure -->
<INPUT TYPE=hidden NAME="req" VALUE="">
<table width="100%" height="100%">
  <tr>
    <td>
      <center>
      <font color=red></font><br>
      <table bgcolor="#a1a1a1" border="0" cellspacing="0" cellpadding="0">
 <tr>
   <td>
     <table border="0" cellspacing="1" cellpadding="2" width="100%">
       <tr>
  <td class="title">Log In</td>
       </tr>
       <tr>
  <td height="10%" class="f10-0">&nbsp;&nbsp;User Name:<BR>
  &nbsp;&nbsp;<input type="text" name="UserLogin" value="">&nbsp;&nbsp;<BR>
  <BR>
  &nbsp;&nbsp;Password:<BR>
  &nbsp;&nbsp;<input type="password" name="UserPasswd">&nbsp;&nbsp;<BR>
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
      <tr><td class="f8-0" align="right" valign="center" height=40>
        <input type="submit" value="Log In">&nbsp;&nbsp;&nbsp;
      </td></tr>
  </table>
  </td>
       </tr>
     </table>
   </td>
 </tr>
      </table>
      </center>
    </td>
  </tr>
</table>
</form>
</body>
</html>

 strada.
prova un po':
With WebBrowser1.document.forms(0)
    .UserLogin.value = strNomeUtente
    .UserPasswd.value = strPassword
    .submit
End With
Ciao
Faber
P.S.: se fa qualcosa di strano magari è l'indice alla collection Forms
che è sbagliato

<input type="password" name="UserPasswd">
[...]
Come vedi gli "input type" ci sono , allora, visto che si tratta di https,
con get non proviamo affatto anche se secondo me funziona.
Prendi questo codice html che ho modificato e salvalo come "provalogin.htm"
o quello che vuoi sostituendo nei tag INUPUT TYPE di UserLogin e Password
quelle giuste. Io ho inserito "prova" su entrambi.
Fai doppio click su prova.htm e dopo 2 secondi dovrebbe collegarsi.
Se funziona andiamo avanti. Fammi sapere.
Michelangelo

 wrote in message 9riri9$lb9
Scusami avevo dimenticato il codice :
--------------
<html>
<SCRIPT LANGUAGE="JavaScript">
setTimeout('document.loginautomatico.submit()',2000);
</SCRIPT>
<head>
<link rel="stylesheet" href="/q.css" type="text/css">
</head>
<body bgcolor="#FFFFFF">
  <form name=loginautomatico method="post"
action="
https://www.us.qualys.com/fo/user_login.php
" target="_top">
<!-- Do not use the GET method with UserLogin and UserPasswd in the URL, it
won't work
and it is not secure -->
<INPUT TYPE=hidden NAME="req" VALUE="">
<table width="100%" height="100%">
  <tr>
    <td>
      <center>
      <font color=red></font><br>
      <table bgcolor="#a1a1a1" border="0" cellspacing="0" cellpadding="0">
 <tr>
   <td>
     <table border="0" cellspacing="1" cellpadding="2" width="100%">
       <tr>
  <td class="title">Log In</td>
       </tr>
       <tr>
  <td height="10%" class="f10-0">&nbsp;&nbsp;User Name:<BR>
  &nbsp;&nbsp;<input type="text" name="UserLogin"
value="prova">&nbsp;&nbsp;<BR>
  <BR>
  &nbsp;&nbsp;Password:<BR>
  &nbsp;&nbsp;<input type="password" name="UserPasswd"
value="provapwd">&nbsp;&nbsp;<BR>



Grazie moltissimo Faber, funziona. You made my day !
Grazie e ciao.
Sal

 --------------
Michelangelo, prima di tutto devo ringraziarti del tempo che hai passato ad
aiutarmi.
Poi devo dirti che in effetti il codice funziona. Avevo creato lo stesso
file sulla base dei tuoi messaggi precedenti e non aveva funzionato, perň
l'ho fatto ripartire stamattina e mi ha funzionato.
Devo confessare che il mio Internet Explorer ver. 5 aveva qualche piccolo
problema su certi siti (typo MSDN Library) e ieri pomeriggio ho deciso di
fare l'upgrade a 6, il che ha risolto l'accesso a MSDN, perň non avevo
riprovato il mio codice.
Stamattina perň ho ricevuto un messaggio di Faber che come vedi suggerisce
un metodo programmatico, che funziona benissimo.
Come puoi immaginare preferisco quello, ma lo scambio di messaggi degli
ultimi giorni é stato molto educativo.
Ringrazio sentitamente tutti.
Ciao
Sal