Python - нажатие на кнопку с Selenium

1

Это кнопка, которую я пытаюсь щелкнуть:

<button class="stkv-c-button stkv-us-button-color--background 
    stkv-u-background-color-transition-150 
    stkv-us-button-color--border stkv-us-button-color 
    stkv-us-button-color--fill stkv-c-button 
    stkv-c-button--raised stkv-c-button--big">

    <span class="stkv-c-button__label stkv-c-button__label--big">Vote Now</span>
</button>

Это xpath (вытащил из Firefox):

[@id='root']/html/body/div/div/div[3]/div/div/footer/div/button"

Я пробовал самые разные способы щелкнуть по кнопке, все безрезультатно.

self.driver.find_element_by_xpath("//*[@id='root']/html/body/div/div/div[3]/div/div/footer/div/button").click()
self.driver.findElement(By.id("Vote Now")).click()
self.driver.find_element_by_name("Vote").send_keys(Keys.ENTER)
self.driver.find_element_by_id('stkv-c-button stkv-us-button-color--background stkv-u-background-color-transition-150 stkv-us-button-color--border stkv-us-button-color stkv-us-button-color--fill stkv-c-button stkv-c-button--raised stkv-c-button--big').click()

Любые предложения будут ценны!

Мне не повезло.

  • 0
    Что происходит, когда вы пытаетесь использовать этот код? Выдает ли исключение ElementNotFound?
Теги:
xpath
selenium
webdriver
css-selectors

4 ответа

0

Согласно HTML, который вы поделили click() на кнопке с текстом в виде Vote Now, вы можете использовать любое из следующих решений:

  • CSS_SELECTOR:

    driver.find_element_by_xpath("span.stkv-c-button__label.stkv-c-button__label--big").click()
    
  • XPATH:

    driver.find_element_by_css_selector("//span[@class='stkv-c-button__label stkv-c-button__label--big' and contains(.,'Vote Now')]").click()
    
0

Используйте эту //button[normalize-space()='Vote Now'] XPath: //button[normalize-space()='Vote Now']

0

Вы можете найти кнопку, отображая на ней текст.

locator = "//button[span[text()='Vote Now']]"
self.driver.find_element_by_xpath(locator).click()
0

У вашей кнопки нет идентификатора или имени, поэтому методы find_element_by_name и find_element_by_id не будут работать. find_element_by_class_name кажется логичным выбором, но, к сожалению, он ожидает только 1 класс, и поскольку ваша кнопка имеет несколько классов, она также не будет работать. Я бы попытался найти кнопку с ее селектором CSS:

self.driver.find_element_by_css_selector('button.stkv-c-button.stkv-us-button-color--background.stkv-u-background-color-transition-150.stkv-us-button-color--border.stkv-us-button-color.stkv-us-button-color--fill.stkv-c-button.stkv-c-button--raised.stkv-c-button--big').click()

Пока на странице нет другой кнопки с тем же селектором CSS, это должно дать вам правильную кнопку. В общем случае, если вы хотите найти элемент с несколькими классами, например <button class="ABC">MyButton</button>, вы можете сделать это с помощью:

self.driver.find_element_by_css_selector('button.A.B.C')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню