Как нажать на элемент через Selenium Python - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь получить данные для учетной записи Facebook, используя Python для браузера selenium, но не могу найти элемент, который я могу найти, нажав на кнопку экспорта.

Смотри скриншот enter image description here

Я пытался, но, похоже, выдает ошибку для класса.

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)

Подскажите, пожалуйста, как я могу нажать на кнопку "Экспорт"?

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Ну, я могу решить это с помощью xpath. Вот решение

self.driver.find_element_by_xpath("//*[contains(@class, '_271k _271m _1qjd layerConfirm')]").click()
0 голосов
/ 15 января 2019

Элемент с текстом Export - это динамически сгенерированный элемент, поэтому для нахождения элемента вам нужно вызвать WebDriverWait , чтобы элемент был кликабельным , и вы можно использовать любую из стратегий локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.layerConfirm>div[data-hover='tooltip'][data-tooltip-display='overflow']"))).click()
    
  • Использование XPATH:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'layerConfirm')]/div[@data-hover='tooltip' and text()='Export']"))).click()
    
  • Примечание : Вы должны добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 15 января 2019

для запуска сценариев автоматизации в таких приложениях, как Facebook, YouTube довольно сложен, потому что это огромная совместная работа, а их веб-приложения разрабатываются лучшими разработчиками в мире, но запускать сценарии автоматизации не исключено, иногда элементы генерируются динамически, иногда скрыты или неактивны. не могу просто пойти и нажать

одним из решений является то, что вы можете сделать, щелкнув по действию xpath realtive или absolute, их идентификатор не указан как "export_button" в файле ресурсов, я думаю, что это может помочь вам

вы также можете найти элемент по имени класса или селектору CSS, как я вижу на снимке экрана: присутствует имя класса "_271K _271m _1qjd layerConfirm", вы можете выполнить действие щелчка для этого

...