Как щелкнуть элемент через Selenium Python

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

См. Прикрепленный снимок экрана  введите описание изображения здесь

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

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)

Не могли бы вы сообщить мне, как я могу нажать кнопку «Экспорт»?


person MishD    schedule 15.01.2019    source источник
comment
возможный дубликат stackoverflow.com/ questions / 35531069 /   -  person Kryesec    schedule 15.01.2019
comment
Вы пробовали искать по текстовому экспорту?   -  person QHarr    schedule 15.01.2019
comment
@QHarr - это способ использования текста self.driver.find_elements_by_link_text (Export) .click ()   -  person MishD    schedule 15.01.2019
comment
Кажется, все еще возникает ошибка, не могу определить способ найти правильный связанный класс или что-то еще :(   -  person MishD    schedule 15.01.2019


Ответы (3)


Элемент с текстом Экспорт - это динамически генерируемый элемент, поэтому для нахождения элемента необходимо вызвать 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
    
person DebanjanB    schedule 15.01.2019

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

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

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

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

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

person akshay patil    schedule 15.01.2019
comment
export_button связан с другой кнопкой, как вы можете видеть в моем коде. - person MishD; 15.01.2019
comment
@akshaypatil Можете ли вы объединить два своих ответа на один и тот же вопрос в один канонический ответ и удалить лишний? - person DebanjanB; 15.01.2019