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

VBA Discussion :

VBA - Selenium - Ouvrir lien suivant condition


Sujet :

VBA

  1. #1
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut VBA - Selenium - Ouvrir lien suivant condition
    Bonjour à tous,

    Grâce à jurassic pork, j'ai découvert Selenium.

    Ce que je voudrais faire : je vais sur Google.be et cherche 'Eiffel tower'. Avec le code suivant, j'ai tous les résultats de la première page qui s'inscrivent sue ma feuille excel (c'est pour un contrôle rien de plus). Ce que je cherche, c'est de cliquer sur le lien qui correspond à la première occurrence de britannica dans le href. J'ai essayé avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Element = robot.FindElementByClass("yuRUbf")
    Element.FindElementByTag("a").Click
    et évidemment, il m'ouvre le premier résultat qui n'est pas britannica.

    Voici le code complet pour l'instant :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Public Sub TestChromeSelenium()
     
    ' nettoyer les anciennes données
    Call ClearRow("Eiffel")
     
    Dim robot As New WebDriver
    Dim maRecherche, liens As Object
    Dim x, y, numPage As Integer
    Rem robot.AddArgument "--headless"  ' pour mettre le navigateur en mode invisible
    robot.AddArgument "--user-data-dir=d:\temp\selenium" ' pour pointer vers un profile particulier (enregistre les cookies dedans)
    robot.Timeouts.ImplicitWait = 8000  ' temps max 8 secondes pour les commandes find avant exception
    robot.Start "chrome", "https://www.google.be"
    Rem robot.Window.SetSize 640, 480
    robot.Window.Maximize
    robot.Get "/"
     
    Set maRecherche = robot.FindElementByName("q")
    maRecherche.SendKeys "Eiffel tower"
    robot.FindElementByName("btnK").submit
    robot.FindElementById "pnnext" ' on attend qu'un élément de la page à afficher soit présent
    numPage = 1
    x = 1
     
        Set liens = robot.FindElementsByXPath("//div[@class='yuRUbf']/a")
        For Each elem In liens
            Sheets("Eiffel").Cells(x, 1).Value = elem.Attribute("href")
     
            Rem Vérification de la présence du mot
            If InStr(elem.Attribute("href"), "britannica") > 0 Then
     
     
                Set Element = robot.FindElementByClass("yuRUbf")
                Element.FindElementByTag("a").Click
     
     
     
     
                Exit For
            End If
     
     
     
            x = x + 1
        Next
     
    robot.Wait (5000) ' temporisation de 5 secondes avant de sortir
    robot.Quit
     
    End Sub
     
     
    Sub ClearRow(Sheet As String)
    With Sheets(Sheet)
        .Activate
        If .Range("A1") <> "" Then
     
            Plage = .Range("A1").CurrentRegion.Address(False, False)
            .Range(Plage).Clear
        Else
        End If
    End With
    End Sub
    Merci pour toutes les idées.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    je ne comprends pas trop bien ce que tu veux faire car avec ton code tu ne recherches que sur la première page de résultats et comme on pouvait s'y attendre on ne faisant une recherche que sur Eiffel, il n' y a pas de résultats avec britannica sur la première page.
    sinon si il y avait eu britannica avec ce code cela aurait du suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set liens = robot.FindElementsByXPath("//div[@class='yuRUbf']/a")    For Each elem In liens
            Sheets("Eiffel").Cells(x, 1).Value = elem.Attribute("href")
     
            Rem Vérification de la présence du mot
            If InStr(elem.Attribute("href"), "britannica") > 0 Then
               elem.Click
               Exit For
            End If 
            x = x + 1
        Next
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Re-,
    Un grand merci pour ton retour.
    Je fais la recherche avec Eiffel tower et pas simplement Eiffel. Et ta méthode fonctionne. OK


    Je reviens vers mes allocations familiales. J'ai ce code pour chercher les AF est ensuite, trouver le mot 'famiris'.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Public Sub TestChromeSelenium()
     
    Rem nettoyer les anciennes données
    Call ClearRow("Famiris")
    Dim robot As New WebDriver
    Dim maRecherche, liens As Object
    Dim x, y, numPage As Integer
    Rem robot.AddArgument "--headless"  ' pour mettre le navigateur en mode invisible
    robot.AddArgument "--user-data-dir=d:\temp\selenium" ' pour pointer vers un profile particulier (enregistre les cookies dedans)
    robot.Timeouts.ImplicitWait = 8000  ' temps max 8 secondes pour les commandes find avant exception
    robot.Start "chrome", "https://www.google.be"
    robot.Window.SetSize 640, 480
    robot.Get "/"
     
    Set maRecherche = robot.FindElementByName("q")
    maRecherche.SendKeys "Allocations familiales"
    robot.FindElementByName("btnK").submit
    robot.FindElementById "pnnext" ' on attend qu'un élément de la page à afficher soit présent
    numPage = 1
    x = 1
     
        Set liens = robot.FindElementsByXPath("//div[@class='yuRUbf']/a")
        For Each elem In liens
            'Debug.Print elem.Attribute("href")
            Sheets("Famiris").Cells(x, 1).Value = elem.Attribute("href")
     
            Rem Vérification de la présence du mot
            If InStr(elem.Attribute("href"), "famiris") > 0 Then
                elem.Click
                Exit For
            End If
     
     
     
            x = x + 1
        Next
     
    robot.Wait (5000) ' temporisation de 5 secondes avant de sortir
    robot.Quit
     
    End Sub
     
     
    Sub ClearRow(Sheet As String)
    With Sheets(Sheet)
        .Activate
        If .Range("A1") <> "" Then
     
            Plage = .Range("A1").CurrentRegion.Address(False, False)
            .Range(Plage).Clear
        Else
        End If
    End With
    End Sub
    Et avec ceci, j'ai une erreur :
    Nom : Image 4.png
Affichages : 482
Taille : 21,3 Ko

    Je soupçonne un soucis avec les parties cachées. Est-ce possible ? Donc, dans mon cas, je voudrais ouvrir le lien famiris.brussels La caisse d'allocations familiales à Bruxelles | Famiris. Le dernier visible sur la page. Comment faire la distinction avec les autres.
    Nom : Image 5.png
Affichages : 482
Taille : 715,0 Ko

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    sur quelle ligne as-tu le message d'erreur (cliquer sur Débogage pour la voir)?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    à la place de elem.click tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    robot.Get elem.Attribute("href")
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Ouaip. Effectivement cela fonctionne parfaitement.

    Pour aller plus loin, peut-on faire la différence entre les différents types de résultat : entre résultats avec carte géo / résultats Autres questions posées / résultats 'normaux' (comme les nomme-t-on ?) ?

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Tu ne dois avoir que les liens de résultats "normaux" avec comme sélection dans le xpath la classe yuRUbf
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    alalalah quel niais je fais. Ben c'est certain !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Ouvrir et remplir un modèle OFT
    Par alain58 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/06/2020, 07h58
  2. Ouvrir Userform suivant une condition cellule
    Par xaviou99 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/06/2018, 11h02
  3. Réponses: 2
    Dernier message: 08/06/2006, 06h29
  4. [VBA-E] ouvrir un repertoire grace a un lien dans un userfor
    Par chmod777 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2006, 14h40
  5. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07

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