Probleme boucle avec webBrowser1.Navigate()

speedi57 Messages postés 12 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 26 septembre 2013 - 25 sept. 2013 à 00:11
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 26 sept. 2013 à 12:12
Bonjour, a tous,

j'essaie actuellement de faire un petit programme qui sert a se connecter a un hotspot en entrant les identifiant automatiquement, pour se faire j'utilise le webbrowser , sauf que quand je veut le faire boucler pour qu'il recommence la connections pour être sur de pas la perdre, sauf que quand je le fais boucler la form ne s'ouvre put . Alors que quand il boucle pas sa marche sans problème

voici le code que j'ai fais pour cela :
            var maconfig = ConfigurationManager.AppSettings;
            string user = Properties.Settings.Default.user;

            string pswd = Properties.Settings.Default.password;
            
                 InitializeComponent();
                   
            //while (1 == 1)
            {
                Application.DoEvents();
                     webBrowser1.Navigate("serveur d'authentification");
                     while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                     {
                         Application.DoEvents();
                     }
                     HtmlDocument document = this.webBrowser1.Document;
                     document.GetElementById("username").SetAttribute("value", user);
                     document.GetElementById("password").SetAttribute("value", pswd);
                     document.GetElementById("submit").InvokeMember("click");
                     System.Threading.Thread.Sleep(300);

            }


s'il quelqu'un arriverais a m'expliqué pourquoi sa marche pas quand je decommente le while,
merci d'avance pour votre aide,
bonne soirée a tous.

3 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
25 sept. 2013 à 12:14
salut,

d'une part je suppose que tu appel cette fonction depuis ta classe d'interface, non implémenté dans un thread, et donc ton application se fige (graphiquement) => quand tu ne le fais qu'une fois, ca fais le traitement et met à jours ta fenêtre, et donc ton webBrowser. Pour palier à ca, appel ta fonction dans un thread. Mais il y a un truc qui va pas :

en général, lorsque tu est connecté et que tu redemande la page de login, on ne te renvois pas le formulaire de connexion. (OU on te le renvois, mais comme connecté => masqué, tu écris quand même tes info et redemande une connexion => le serveur n'apprécie peu-être pas).
Donc l'idée serai plutot de vérifier dans ta page si tu es connecté (en général tu peux t'appuyer sur des message type genre 'bienvenue,' ou 'Vous êtes connecté en tant que ..', etc. ou encore vérifier si tu à un champ de déconnexion), et dans ce cas là, ne pas réessayer de te connecter : quand tu navigue manuellement, tu ne te reconnecte pas à chaque page chargé (?).

Ce que tu dois faire, c'est avoir une méthode qui test si tu es connecté, et dans le cas ou tu est déco, appeler ta méthode de connexion (ne serais-ce que pour éviter de faire 10.000 appel inutil sur le serveur => en fonction de comment il est fait, tu risque un blacklistage)


bon dev
naga
0
speedi57 Messages postés 12 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 26 septembre 2013
25 sept. 2013 à 13:07
En faite mon code est directement dans le form, je vais essayer comme tu a dit merci
0
speedi57 Messages postés 12 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 26 septembre 2013
26 sept. 2013 à 12:07
j'ai modifier le code comme tu ma proposer est sa marche beaucoup mieux , je laisse le code pour ceux qui sa intéressera

        public Form1()
        {
                 InitializeComponent();          
        }
        public void connect()
        {

            webBrowser1.Navigate("https://auth.univ-lorraine.fr/login?service=");
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            var maconfig = ConfigurationManager.AppSettings;
            string user = Properties.Settings.Default.user;
            string pswd = Properties.Settings.Default.password;
            HtmlDocument document = this.webBrowser1.Document;
            string titre = document.Title;
            if (titre == "CAS - Central Authentication Service")
            {
                document.GetElementById("username").SetAttribute("value", user);
                document.GetElementById("password").SetAttribute("value", pswd);
                document.GetElementById("submit").InvokeMember("SE CONNECTER");
                document.GetElementById("submit").InvokeMember("click");
            }
            webBrowser1.Navigate("https://portail-crous.crous-nancy-metz.fr/authen-cas%3Furl%3DaHR0cDovL3d3dy5nb29nbGUuY29tLw%3D%3D%26authen%3DAA%3A%3AAuthen-CAS-UL%3A%3AAuthz-LDAP-UL");
            timer1.Interval = 10000;
           
        }
 
        private void button4_Click_1(object sender, EventArgs e)
        {
            Form2 myNewForm = new Form2();
            myNewForm.Show();
        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private void timer1_Tick_1(object sender, EventArgs e)
        {
            connect();
        }
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
26 sept. 2013 à 12:12
d'accord tu as donc préféré utiliser un timer, pourquoi pas, ca fonctionne aussi ^^. Tu risque par contre de déclencher un test de connexion au milieu d'un traitement ... afin de l'éviter, écrirs plutot :
     public void connect()
{
	if(webBrowser1.ReadyState == WebBrowserReadyState.Complete)
	{
		webBrowser1.Navigate("https://auth.univ-lorraine.fr/login?service=");
		while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
		{
			Application.DoEvents();
		}
		var maconfig = ConfigurationManager.AppSettings;
		string user = Properties.Settings.Default.user;
		string pswd = Properties.Settings.Default.password;
		HtmlDocument document = this.webBrowser1.Document;
		string titre = document.Title;
		if (titre == "CAS - Central Authentication Service")
		{
			document.GetElementById("username").SetAttribute("value", user);
			document.GetElementById("password").SetAttribute("value", pswd);
			document.GetElementById("submit").InvokeMember("SE CONNECTER");
			document.GetElementById("submit").InvokeMember("click");
		}
		webBrowser1.Navigate("https://portail-crous.crous-nancy-metz.fr/authen-cas%3Furl%3DaHR0cDovL3d3dy5nb29nbGUuY29tLw%3D%3D%26authen%3DAA%3A%3AAuthen-CAS-UL%3A%3AAuthz-LDAP-UL");
	}
	timer1.Interval = 10000;
   
}



de cette manière, si ton webBrowser est déjà occupé, il réinitialiser simplement le timer ;).

bne aprem.
naga
0
Rejoignez-nous