2
votes

Comment cliquer sur un élément via Selenium Python

J'essaie de récupérer les données du compte Facebook à l'aide du navigateur sélénium python, mais je ne parviens pas à trouver l'élément que je peux rechercher en cliquant sur un bouton d'exportation.

Voir la capture d'écran ci-jointe  entrez la description de l'image ici

J'ai essayé, mais il semble me donner une erreur pour le cours.

def login_facebook(self, username, password):
    chrome_options = webdriver.ChromeOptions()
    preference = {"download.default_directory": self.section_value[24]}

    chrome_options.add_experimental_option("prefs", preference)
    self.driver = webdriver.Chrome(self.section_value[20], chrome_options=chrome_options)
    self.driver.get(self.section_value[25])

    username_field = self.driver.find_element_by_id("email")
    password_field = self.driver.find_element_by_id("pass")

    username_field.send_keys(username)
    self.driver.implicitly_wait(10)

    password_field.send_keys(password)
    self.driver.implicitly_wait(10)

    self.driver.find_element_by_id("loginbutton").click()
    self.driver.implicitly_wait(10)

    self.driver.get("https://business.facebook.com/select/?next=https%3A%2F%2Fbusiness.facebook.com%2F")
    self.driver.get("https://business.facebook.com/home/accounts?business_id=698597566882728")
    self.driver.get("https://business.facebook.com/adsmanager/reporting/view?act="
                    "717590098609803&business_id=698597566882728&selected_report_id=23843123660810666")
    # self.driver.get("https://business.facebook.com/adsmanager/manage/campaigns?act=717590098609803&business_id"
    #                 "=698597566882728&tool=MANAGE_ADS&date={}-{}_{}%2Clast_month".format(self.last_month,
    #                                                                                      self.first_day_month,
    #                                                                                      self.last_day_month))

    self.driver.find_element_by_id("export_button").click()
    self.driver.implicitly_wait(10)
    self.driver.find_element_by_class_name("_43rl").click()
    self.driver.implicitly_wait(10)

Pouvez-vous s'il vous plaît me faire savoir comment puis-je cliquez sur le bouton Exporter?


4 commentaires

duplication possible de stackoverflow.com/ questions / 35531069 /…


Avez-vous essayé de rechercher par le texte "export"?


@QHarr est une façon d'utiliser un texte "self.driver.find_elements_by_link_text (" Exporter "). Click ()"


Semble toujours obtenir une erreur, impossible d'identifier un moyen de trouver la bonne classe associée ou autre chose :(


3 Réponses :


0
votes

pour exécuter des scripts d'automatisation sur des applications comme facebook, youtube assez difficile car ce sont d'énormes coporations et leurs applications Web sont développées par les meilleurs développeurs du monde mais il n'est pas impossible d'exécuter des scripts d'automatisation parfois des éléments sont générés dynamiquement parfois masqués ou inactifs vous je ne peux pas aller et cliquer

une solution est que vous pouvez faire par action de clic par xpath realtive ou absolu leur identifiant n'est pas spécifié comme "export_button" dans le fichier de ressources, je pense que cela pourrait vous aider

vous pouvez également trouver un élément par nom de classe ou sélecteur css comme je le vois dans la capture d'écran, le nom de la classe est présent "_271K _271m _1qjd layerConfirm" vous pouvez effectuer une action de clic sur cela


2 commentaires

export_button est associé au bouton différent comme vous pouvez le voir dans mon code.


@akshaypatil Pouvez-vous regrouper deux de vos réponses à la même question en une seule réponse canonique et supprimer la redondante?



1
votes

Eh bien, je suis capable de le résoudre en utilisant xpath. Voici la solution

self.driver.find_element_by_xpath("//*[contains(@class, '_271k _271m _1qjd layerConfirm')]").click()


0 commentaires

3
votes

L'élément avec du texte comme Exporter est un élément généré dynamiquement donc pour localiser l'élément, vous devez induire WebDriverWait pour que l'élément soit cliquable em > et vous pouvez utiliser l'une des Stratégies de localisation :

  • Utilisation de CSS_SELECTOR :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Utilisation de XPATH :

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'layerConfirm')]/div[@data-hover='tooltip' and text()='Export']"))).click()
    
  • Remarque : vous devez ajouter les importations suivantes:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.layerConfirm>div[data-hover='tooltip'][data-tooltip-display='overflow']"))).click()
    

  • 0 commentaires