IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Webbrowser et automation


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Par défaut Webbrowser et automation
    Bonjour à tous,

    Je cherche à controler par code une page web mais je n'y arrive pas. Le but de mon appli est de faire une recherche sur les pages blanches et de récupérer l'information à l'intérieur de mon appli.

    J'ai vu plusieurs fois qu'il fallait utiliser le composant mshtml.axWebBrowser pour pouvoir prendre le contrôle des éléments de la page web (d'ailleurs c'est une chose que je n'arrive pas à comprendre puisque le composant WebBrowser par défaut comporte déjà tout ce qu'il faut pour pouvoir le faire ... mais ça ne semble pas marcher) . Il y a un exemple de ce que je veux faire sur code project :
    http://www.codeproject.com/KB/cs/mshtml_automation.aspx

    Seulement ce code fonctionne bien pour le site de google, mais pas sur le site des pages jaunes et je ne comprends pas pourquoi ! Voici la page que je cherche à "contrôler" pour pouvoir rentrer automatiquement le nom et la localisation d'une personne puis de lancer la recherche :
    http://www.pagesjaunes.fr/trouverunn...sBlanchesPJ.do

    Ca parait tout simple mais je bloque complètement. Je me retrouve en fait à avoir des éléments nulls comme si ils n'existaient pas sur la page, donc l'automation ne se fait pas. Pourtant j'ai bien regardé le source...

    Là par exemple ce sont mes lignes de code pour rentrer "Dupont" dans la textbox nommée "Qui / Quoi" de la page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HTMLDocument myDoc = new HTMLDocumentClass();
    myDoc = (HTMLDocument) axWebBrowser1.Document;
    HTMLInputElement otxtSearchBox = (HTMLInputElement)myDoc.all.item("quiquoi", 0); // champ du nom
    otxtSearchBox.value = "Dupont";
    Quelqu'un peut m'aider ?
    Je vous en serais reconnaissant. Je galère depuis 3 jours dessus.

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Bonjour,

    Tu essaies de remplir les champs de la page, alors qu'il est plus facile d'envoyer une requête POST vers la page http://www.pagesjaunes.fr/trouverunn...sBlanchesPJ.do.

    D'abord, avec un utilitaire comme LiveHttpHeaders (addin Firefox), tu peux récupérer la requête envoyée lorsque tu fait la recherche via Firefox.

    Voici ce que j'ai récupéré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    http://www.pagesjaunes.fr/trouverunnom/RecherchePagesBlanchesPJ.do
     
    POST /trouverunnom/RecherchePagesBlanchesPJ.do HTTP/1.1
    Host: www.pagesjaunes.fr
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://www.pagesjaunes.fr/trouverunnom/RecherchePagesBlanches.do?portail=PJ
    Cookie: JSESSIONID=0CE314C7E8723570C70A4006263D214A.yas11g; VisitorID=181122925763655579; RMID=5398e0d74944fba0; e=SUT7qMCoCh4AAHsHG@M; crm_cookieEnabled=1; ctr=1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 229
    actionForwardName=reponse&codeLieu=&nom=dupond&prenom=&voieLibelle=&voieInitiale=&voieCode=&numeroVoie=&localiteLibelle=&localiteInitiale=&localiteCode=&depRegLibelle=31&departementInitiale=&departementCode=&regionCode=&x=63&y=21
    HTTP/1.x 200 OK
    Date: Mon, 15 Dec 2008 09:06:50 GMT
    Server: Apache
    Set-Cookie: VisitorID=181122925763655579; Expires=Thu, 13-Dec-2018 09:06:50 GMT; Path=/
    Vary: Accept-Encoding,User-Agent
    Content-Encoding: gzip
    Keep-Alive: timeout=1, max=200
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html;charset=ISO-8859-1
    Le problème, c'est surement le JSESSIONID que tu vois dans la requête, c'est un cookie qu'envoie ton navigateur au serveur des pages jaunes.

    Il va falloir que tu le récupère pour le renvoyer, mais peut-être est-ce facultatif pour la 1ere requête ...

    Le but est donc d'envoyer la même requête au serveur avec l'objet HTTPRequest ou un truc du genre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Par défaut
    Merci Paul pour ton aide.

    Mais justement l'intérêt de mon appli est quelque part de pouvoir avoir un certain contrôle des éléments DOM des pages webs, tout en utilisant le controle webbrowser pour la gestion des cookies etc. Je ne souhaite pas utiliser un logiciel ou addin de browser pour effectuer cette tâche.

    Le soucis c'est par exemple de pouvoir automatiser le suivit de la page suivante si il y a trop de résultat affiché sur le site et cela de manière transparente pour l'utilisateur.

    Par code il me suffirait de faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HTMLInputElement oElement = (HTMLInputElement)myDoc.all.item("monLienSuivant", 0); // champ du nom
    oElement.click();
     
    // traitement sur la nouvelle page ...
    Moi dans mon logiciel par exemple, suivant la recherche d'un nom de personne, je propose une liste formatée qui est basée sur l'intégralité des informations que m'aura remonté le site des pages jaunes, ça veut dire plusieurs pages de résultats quelques fois.

Discussions similaires

  1. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09
  2. [VBA-W] [AUTOMATION]Liste Fonctions/Paramètres
    Par Sunny dans le forum VBA Word
    Réponses: 2
    Dernier message: 05/12/2002, 16h35
  3. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17
  4. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32
  5. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo