[C#] Webbrowser et compilation |
Bienvenue invité ( Connexion | Inscription )
[C#] Webbrowser et compilation |
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 && Event.__inlineSubmit && 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 Kozengod |
|
|
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 :) |
|
|
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...
|
|
|
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. |
|
|
23 Dec 2015, 12:51
Message
#5
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 531 Inscrit : 30 Jan 2014 Membre no 189 144 |
"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 :) |
|
|
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. |
|
|
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
|
|
|
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 |
|
|
Nous sommes le : 24th September 2024 - 22:22 |