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

VB.NET Discussion :

Navigation internet explorer invisible


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 104
    Points : 18
    Points
    18
    Par défaut Navigation internet explorer invisible
    Bonjour à tous,

    J'ai pas mal cherché et essayé mais rien n'y fait, je n'y arrive pas...

    Je suis en train de développer un petit logiciel en VB.NET et je bloque. Je cherche à l'heure actuelle à:
    - Parcourir une page web défini
    - isoler un bloc de contenu
    - Cliquer un à un sur les liens de ce bloc puis fermer (pour procéder à des tests plus tard)

    Tout se passe bien jusqu'au clic...

    Le problème est qu'à chaque fois que le logiciel trouve un lien, il clique mais ouvre une page Internet Explorer (IE). Je me retrouve avec pleins de pages IE que je dois fermer manuellement à la fin.

    Il me faudrait rendre invisible ce processus.

    Voici le bout de code qui clique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim wb as new webBrowser()
    [.....]
            For Each Lien As HtmlElement In wb.Document.GetElementsByTagName("A")
                wb.Visible = False
                Lien.InvokeMember("click")
            Next
    Merci pour votre précieuse aide.

    Bonne journée.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par alberto314 Voir le message
    Bonjour à tous,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim wb as new webBrowser()
    [.....]
            For Each Lien As HtmlElement In wb.Document.GetElementsByTagName("A")
                wb.Visible = False
                Lien.InvokeMember("click")
            Next
    Merci pour votre précieuse aide.

    Bonne journée.
    Ton "WebBrowser", Est-ce le contrôle WebBrowser, ou InternetExplorer que tu pilotes à partir de VB.net ?

    Parce que le contrôle WebBrowser semble permettre de récupérer le document (page Web) affiché. Et je ne serais pas surpris que, ensuite, tu puisses traiter ton document hors-connexion.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 104
    Points : 18
    Points
    18
    Par défaut
    Bonjour Clementmarcotte et merci pour ton aide.

    Je ne sais pas trop répondre à ta question.

    A priori il ne s'agit pas du contrôle d'internet explorer car celui-ci n'est mentionné nul part. Je fais peut-être erreur ?

    Bonne journée.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Citation Envoyé par alberto314 Voir le message
    - Cliquer un à un sur les liens de ce bloc puis fermer (pour procéder à des tests plus tard)
    Pour répondre à cette question, il faudrait expliciter l'objectif final de ces "click" sur les liens. Théoriquement, lorsqu'on clique sur un lien, c'est pour ouvrir une page web. Maintenant, s'il s'agit de faire autre chose, l'approche n'est peut-être pas la bonne et l'utilisation d'un WebClient serait peut-être plus adapté : http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 104
    Points : 18
    Points
    18
    Par défaut
    Bonjour Ebastien et merci pour ton aide.

    J'ai besoin pour la demande du projet que le clic puisse être comptabilisé en temps que "clic normal" avant de fermer la page (en virtuel puisque celle-ci devrait s'ouvrir en virtuel) pour valider ou non un booleen.

    Ce que je ne comprends pas (je rappel que je suis débutant...) c'est que j'utilise quasiment la même syntaxe qui fonctionne à un autre endroit du projet. Il y a cependant une légére différence qui à surement toute son importance qui est (enfin, en la relisant à part le Tagname il n'y a quand même pas beaucoup de différences ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       Dim wb as new webBrowser()
    [.....]
            For Each Elem As HtmlElement In wb.Document.GetElementsByTagName("Input")
                   Elem.InvokeMember("click")
            Next
    Pourquoi celle-ci fait le travail en invisible alors que l'autre fait le travail en visible ? Mes compétences limitées ne me permettent pas de comprendre...

    Notez que j'ai oublié de supprimer la ligne wb.Visible = False dans mon post initial. Ce n'était qu' un essai infructueux.

    Merci pour votre précieuse aide.

    Bonne journée.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    La différence est grande : D'un coté il s'agit de poster un formulaire (Input) de l'autre d'appeler une URL.
    L'url peut être définie comme devant s'ouvrir dans une autre fenêtre (c'est dans le code de la page web). Dans ce cas, ouverture dans une fenêtre IE.
    Maintenant, tu peux tenter de modifier l'attribut Target du lien afin d'éviter cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Lien As HtmlElement In wb.Document.GetElementsByTagName("A")           
        'wb.Visible = False
        DirectCast(Lien.DomElement, mshtml.HTMLAnchorElement).target = ""
        Lien.InvokeMember("click")
     Next
    Il faudra importer la référence Microsoft.mshtml au niveau du projet. Maintenant j'ai testé pour une URL mais je ne sais pas si ça fonctionne à tous les coups ... J'avoue ne jamais m'être aventuré dans ce genre de chose ... De plus, je n'ai pas testé si le lien correspond à une adresse email : ça peut être la surprise

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 104
    Points : 18
    Points
    18
    Par défaut
    Effectivement je me doutais d'une différence mais elle m'avait échappée ...

    J'ai bien importé le référence Microsoft.mshtml et modifié le code.

    Au premier tour de la boucle j'entends un "tic" de clic mais au deuxième tour j'obtiens:
    Accès refusé. (exception de HRESULT: 0x80070005 (E_ACCESSDENIED))

    J'ai testé avec target="_self", "_parent", "_top".

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par alberto314 Voir le message
    Bonjour Clementmarcotte et merci pour ton aide.

    Je ne sais pas trop répondre à ta question.

    A priori il ne s'agit pas du contrôle d'internet explorer car celui-ci n'est mentionné nul part. Je fais peut-être erreur ?

    Bonne journée.
    Si tu as pris le contrôle WebBrowser de la boîte à outils, c'est un contrôle dotnet qui permet d'ajouter des fonctions Internet à un programme VB, ou même, de programmer un navigateur Internet.


    Sinon, il existe une version COM (activeX) du même contrôle.

    Même que l'on peut aussi piloter IE directement par automation.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 104
    Points : 18
    Points
    18
    Par défaut
    Bonjour Clementmarcotte,

    Voici mes déclarations (il s'agit d'un bout de code récupéré et adapté avec les connaissances du bord...)

    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
      Public Sub PartLoaded(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)
            bDocLoaded = True
            Threading.Thread.Sleep(200)
        End Sub
     
        Public Sub Click()
            Dim sTexte, sUrl As String
            Dim wb As New WebBrowser()
            AddHandler wb.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf PartLoaded)
            Dim sb As StringBloc
    '[......]
    For Each Lien As HtmlElement In wb.Document.GetElementsByTagName("A")           
        DirectCast(Lien.DomElement, mshtml.HTMLAnchorElement).target = ""
        Lien.InvokeMember("click")
     Next
    Je pense donc qu'il s'agit du contrôle WebBrowser de la boîte à outils (sans certitudes).

    Merci,
    Bonne journée.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 104
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Cela fait maintenant plusieurs jours que je teste et que les clics semblent se faire mais je viens de faire un test en mettant un point d'arret et en regardant les stats google analytics il semble qu’après le clic la navigation n'existe pas.

    Est-ce normal ?

    Je suis resté sur ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Lien As HtmlElement In wb.Document.GetElementsByTagName("A")           
        'wb.Visible = False
        DirectCast(Lien.DomElement, mshtml.HTMLAnchorElement).target = ""
        Lien.InvokeMember("click")
     Next
    Merci à vous !

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/07/2013, 12h47
  2. Réponses: 0
    Dernier message: 10/07/2013, 12h29
  3. Internet Explorer
    Par remid1985 dans le forum IE
    Réponses: 3
    Dernier message: 22/01/2004, 13h52
  4. URL d'Internet Explorer
    Par dbourni dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/12/2002, 08h56
  5. internet explorer
    Par numeror dans le forum Web & réseau
    Réponses: 2
    Dernier message: 22/07/2002, 09h23

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