web-dev-qa-db-fra.com

Click click by find_element_by_class_name not working python Selenium webdriver NOT working

J'essaie d'ajouter des contacts sur LinkedIn en utilisant Python et Selenium. J'essaie de le faire en ajoutant les suggestions de contacts faites par LinkedIn dans l'onglet "Réseau" ( https : //www.linkedin.com/mynetwork ), qui a une fonction de défilement infini.

Fondamentalement, je veux que le script trouve le bouton "Connecter", qui est à côté de chaque profil suggéré, cliquez sur le bouton, puis répétez jusqu'à erreur par laquelle le script devrait défiler vers le bas pour charger plus de boutons "Connect" à réitérer.

Le meilleur moyen que j'ai trouvé pour localiser l'élément bouton est de trouver_element_by_class_name () car tous les boutons de connexion ont la même classe. J'ai également essayé de localiser les éléments en utilisant CSS et Xpath, sans succès.

PROBLÈME: le script peut cliquer sur le premier bouton Connecter, mais aucun après. J'ai essayé de nombreuses idées d'implémentation (localisation par Xpath, CSS, en utilisant une liste de boutons à cliquer), mais aucune ne semble fonctionner. Vous trouverez ci-dessous la partie pertinente du script.

while True:
    try:
        driver.find_element_by_class_name("mn-person-card__person-btn-ext.button-secondary-medium").click()
        time.sleep(1)
    except:
        pass
        print("trying to scroll")
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(1) 

Des idées? Il me semble que le code devrait fonctionner et qu'il y a autre chose qui empêche le succès. Peut-être un bug ou similaire. Je pourrais mentionner que je suis plutôt nouveau dans tout cela, et c'est le premier script que j'essaie de créer pour manipuler un navigateur.

J'utilise le pilote Firefox. Le script complet peut être trouvé ici: http://Pastebin.com/qtdNsRtz

Merci d'avance!

6
thecpaptain

Tu devrais utiliser find_elements pour rechercher tous les éléments de la même classe Essayez ceci pour obtenir tous les éléments:

elements = driver.find_elements_by_class_name("mn-person-card__person-btn-ext.button-secondary-medium")

puis utilisez une boucle for pour cliquer sur chacun d'eux. Par exemple:

for e in elements:
    e.click()
7
Amit

La façon dont vous essayez d'utiliser find_element_by_class_name le localisateur n'est pas correct car ce localisateur ne prend pas en charge les classes composées dans.

Vous devez utiliser xpath ou cssSelector si l'attribut de classe a plus d'un nom de classe:

driver.find_element_by_xpath("//button[@class='mn-person-card__person-btn-ext button-secondary-medium']").click()
4
NarendraR