IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [C#] Webbrowser et compilation
Options
kozengod
posté 22 Dec 2015, 09:52
Message #1


Nouveau Membre


Groupe : Membres
Messages : 3
Inscrit : 22 Dec 2015
Membre no 197 514



Bonsoir,
j'ai un soucis au niveau webbrowser, bon je touche pas trop au csharp (et meme a la programmation) depuis un bon moment donc je rouille, j'ai regarder sur la msdn etc et j'ai pas trouver mon bonheur, voici donc le bout de code qui pose soucis :

Code
        private void bt_deco_Click(object sender, EventArgs e)
        {
            this.webBrowser.Document.GetElementById("userNavigationLabel").InvokeMember("click");
            
            HtmlElementCollection elements = this.webBrowser.Document.GetElementsByTagName("Form");      

            foreach (HtmlElement currentElement in elements)
            {
                currentElement.InvokeMember("submit");
            }

        }


je met la solution qui lui fonctionne ci-dessous :

Code
        private void bt_deco_Click(object sender, EventArgs e)
        {
            this.webBrowser.Document.GetElementById("userNavigationLabel").InvokeMember("click");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HtmlElementCollection elements = this.webBrowser.Document.GetElementsByTagName("Form");

            foreach (HtmlElement currentElement in elements)
            {
                currentElement.InvokeMember("submit");
            }
        }


le soucis étant que je dois utiliser alors deux bouton, un pour ouvrir le menu avec le bt_deco ensuite une fois le menu ouvert utiliser le button1 pour qu'il click ma form, la ok ca marche, mais si je fais comme dans le premier code donc sur un seul bouton, il commence a ouvrir le menu puis paf il me met page erreur 500 car il a pas trouver la form...

il faudrait grossomodo que la ligne :
Code
            this.webBrowser.Document.GetElementById("userNavigationLabel").InvokeMember("click");

s'excecute, puis que le logiciel attente genre 1 ou 2 seconde que le menu s'affiche puis seulement qu'il execute la suite... j'ai de suite penser au sleep, ca marche pas apparemment... pour ceux qui se pose la question le menu est le deroulant en haut a droite de facebook donc en gros la premiere ligne l'ouvre, le deuxieme chope le bouton de deconnexion, dans quel but ? car je tente de faire un logiciel qui utilise facebook et donc j'ai trouver pour me connecter (meme me deco) mais la pour la deco j'aimerais que ca se fasse en un seul bouton ...

Donc comment faire pour qu'il attente la fin de l'ouverture de ce foutu menu deroulant pour check la form de deconnexion et la cliquer ? car les do event, sleep, boucle pour temporiser et autres methodes a l'arrache fonctionne pas....

a moins que vous n'ayez une solution pour cliquer la bonne form sans devoir toutes les tester ... voici le code de form du bouton deconnexion dans le menu deroulant :
Code
<a class="_54nc" role="menuitem" href="#" data-gt='{"ref":"async_menu","logout_menu_click":"menu_logout"}'>
    <span>
        <span class="_54nh">
            <form class="_w0d" id="u_g_8" onsubmit="return window.Event &amp;&amp; Event.__inlineSubmit &amp;&amp; Event.__inlineSubmit(this,event)" action="https://www.facebook.com/logout.php" method="post">
                <input name="fb_dtsg" type="hidden" value="xxxxxxxxxxx" autocomplete="off">
                <input name="ref" type="hidden" value="mb" autocomplete="off">
                <input name="h" type="hidden" value="xxxxxxxxxxx" autocomplete="off">
                </form>
                Déconnexion
        </span>
    </span>
</a>


et oui j'ai essayer de faire l'invoker comme pour la connexion sur l'u_g_8 mais il en veut pas ^^


Ensuite le deuxieme soucis... bon la c'est plus generale, je n'ai jamais utiliser visual studio, et je trouve pas l'option... j'aimerais ensuite pouvoir compiler de maniere autonome mon executable, car oui il se trouve dans le dossier release, mais lorsque je le teste sur une autre machine j'ai des soucis de compatibilité, dll et j'en passe, donc ou est le bouton "creer un exe autonome" et j'ai chercher, j'ai vu qu'il fallait faire une install personnalisé de visual studio pour y inclure clickonce apparemment, ce que j'ai fais, mais ca m'ajoute pas l'option genre creer un exe avec clickonce dans l'ide ou alors j'ai du le louper...

Un grand merci d'avance biggrin.gif
Kozengod
Go to the top of the page
 
+Quote Post
tibounise
posté 22 Dec 2015, 10:06
Message #2


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 531
Inscrit : 30 Jan 2014
Membre no 189 144



Salut,

Je pense que t'es pas sur le meilleur forum pour parler de c#...


--------------------
Mon site web perso - Adaptateurs ADB/USB DIY - Réparation MacBook Air A1304 - Utiliser une iSight de MacBook Air en USB
Si vous souhaitez vous débarrasser de votre matériel informatique en région IDF, je suis preneur :)
Go to the top of the page
 
+Quote Post
kozengod
posté 22 Dec 2015, 10:35
Message #3


Nouveau Membre


Groupe : Membres
Messages : 3
Inscrit : 22 Dec 2015
Membre no 197 514



"la programmation en generale" si ca parle pas de programmation...
Go to the top of the page
 
+Quote Post
Jaypee
posté 22 Dec 2015, 14:08
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



C'est un peu un défi d'essayer de répondre à une question concernant une techno qu'on ne fréquente pas...

Mais il me semble pouvoir dire des choses sur cet exemple :

Question:
- Où ce code intervient-il? Qui est "this"

Il ressemble déjà à un code de "handler" d'événement, invoqué par le "framework" web, c'est à dire que l'objet sender c'est le bouton lui-même, avec déjà renseigné, son identifiant, son type (un submit vs. une checkbox, un radio-bouton, etc) et l'événement, le click avec sa date et ses modificateurs (descente du bouton, sortie du rectangle du bouton)

A priori, une fois-là, on ne s'occupe plus d'interface utilisateur, on doit interagir avec le modèle qui gouverne la vue dont ce bouton fait partie, juste le compléter, petit-à-petit, une données à la fois. Par exemple si le bouton est la sélection d'une ligne dans une table, seul le numéro de ligne dans le modèle qui s'occupe de cette table doit être calculé. Si c'est une option, un booléen doit être mis à vrai...

Si c'est un bouton "submit", il faut vérifier que toutes les données du formulaire sont valides (pour se protéger des attaques des hackers par SQL injection, etc) et les traiter en invoquant le service que ce formulaire doit rendre (créer ou modifier une rangée de base de données)

Il faut se rappeler que tous ces frameworks sont construits sur le principe de l 'inversion de contrôle, c'est le "framework" qui les appelle comme réponse aux actions de l'utilisateur sur la vue affichée à l'écran, en contrepartie, tous les détails du clic sont déjà remplis (qui, quoi, où). A priori toujours, la recherche d'éléments d'interface est inattendue à cette étape.


J-P, en mode radar, car peu de contexte est donné.

Ce message a été modifié par Jaypee - 22 Dec 2015, 17:27.
Go to the top of the page
 
+Quote Post
tibounise
posté 23 Dec 2015, 12:51
Message #5


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 531
Inscrit : 30 Jan 2014
Membre no 189 144



Citation (kozengod @ 22 Dec 2015, 10:35) *
"la programmation en generale" si ca parle pas de programmation...


Le truc c'est que tu viens parler de .NET sur un forum à très fort penchant Macuser... Je doute que tu trouves la solution à ton problème x)


--------------------
Mon site web perso - Adaptateurs ADB/USB DIY - Réparation MacBook Air A1304 - Utiliser une iSight de MacBook Air en USB
Si vous souhaitez vous débarrasser de votre matériel informatique en région IDF, je suis preneur :)
Go to the top of the page
 
+Quote Post
Jaypee
posté 23 Dec 2015, 15:07
Message #6


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Bon OK, c'est du C# et c'est un forum Mac, mais si on est un vrai codeur, le langage n'importe pas vraiment.

J'étais vraiment en mode Radar... ou alors j'ai succombé au TL;DR (too long; did not read), mais je vais tenter de me rattraper et tenter une deuxième réponse que j'espère plus sensée.

Je crois que ce qui se passe, c'est que dans l'exemple de code 1, le formulaire n'existe pas encore dans le DOM de la page, quand on ne le voit pas. Idéalement, il faudrait le créer dans un conteneur (un div, un span) invisible. Ainsi, son existence dans le DOM est permanente et indépendante de sa visibilité, pour permettre de cliquer sur les boutons qu'il contient.

Pour valider mon hypothèse, utiliser les outils de dev (F12) dans IE pour examiner le DOM, menu fermé et menu ouvert.
Autre hypothèse, la recherche est mal configurée. On pourrait envisager plutôt de l'XPath que de la recherche dans le DOM.

Dans la solution 2, on pourrait aussi imaginer que le survol du bouton (événement "hover" plutôt que "click") fasse apparaître le formulaire donc un seul clic serait nécessaire au final.

Voilà, mais je reste en mode radar...
J-P

Ce message a été modifié par Jaypee - 23 Dec 2015, 15:20.
Go to the top of the page
 
+Quote Post
kozengod
posté 23 Dec 2015, 15:40
Message #7


Nouveau Membre


Groupe : Membres
Messages : 3
Inscrit : 22 Dec 2015
Membre no 197 514



Biensur que le dom est différent, la source du site est differente, le contenu change une fois le menu ouvert, pour ca que je dois trouver un moyen qu'il ouvre le menu, attende que ce menu sois ouvert puis check les form, d'ou ma demande de base, comment faire pour attendre la fin de l'action du click sur le menu + x ms puis seulement check la form, je sais que le soucis est la, juste que je trouve pas de solution pour faire patienter ma routine et le sleep, do events etc ne fonctionne pas confused5.gif
Go to the top of the page
 
+Quote Post
Jaypee
posté 23 Dec 2015, 18:43
Message #8


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Et en interceptant l'événement "mouse up", il n'y aurait pas moyen d'introduire une pause bloquante (je précise, parce que souvent elle a lieu, plus tard, hors séquence)

JP
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th April 2024 - 21:30