【问题标题】:how to find button to click in Selenium using python?如何使用 python 在 Selenium 中找到单击按钮?
【发布时间】:2017-07-26 09:43:09
【问题描述】:
</div>
<fieldset class="pi-search-form__footer">
<div class="pi-search-form__footer-cta" data-ng-show="stay.isStandardBooking()">
<button class="btn btn--primary" data-ng-click="submitSearch()">
<span data-ng-switch="ctaText">
<span data-ng-switch-when="checkavailability">Check availability</span>
<span data-ng-switch-when="searchnow">Search now</span>
<span data-ng-switch-default data-pi-track-click="SEARCH_AGAIN">Search</span>
</span>
</button>
</div>

这是我的按钮代码,我想点击“检查可用性”按钮。 我使用该代码,但它不起作用。

browser.find_elements_by_xpath(".//span[contains(text(), 'Check availability')]")

【问题讨论】:

  • 您收到什么错误信息?也试试这个 xpath 一次 - //div[@class='pi-search-form__footer-cta']//span[contains(text(), 'Check availability')]
  • 如果没有基本的编程知识,不要跳到自动化。首先阅读 python 和 selenium API。

标签: python selenium button


【解决方案1】:

这是您问题的答案:

当您想要单击一个按钮时,您的xpath 应该是唯一的并且应该标识一个元素。因此,您应该考虑使用find_element_by_xpath,而不是find_elements_by_xpath。要点击 Check availability 按钮,您可以使用以下代码行:

//ensure the imports
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
//other code
//click on Check availability button
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn--primary']//span[@data-ng-switch-when='checkavailability']")))
browser.find_element_by_xpath("//button[@class='btn btn--primary']//span[@data-ng-switch-when='checkavailability']").click()

如果这能回答您的问题,请告诉我。

【讨论】:

  • 返回 'AttributeError: 'list' object has no attribute 'click''
  • 它返回 -'selenium.common.exceptions.NoSuchElementException'。我认为当单击按钮页面未加载或可能是 cookie 问题。所以请帮助我。
  • 它点击了但没有转到下一页。所以请告诉我?
【解决方案2】:

应该是

browser.find_elements_by_xpath(".//span[contains(text(), 'Check availability')]")

如果它不起作用,请使用显式等待。

from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 30)
checkAvailability = wait.until(EC.presence_of_element_located((By.XPATH, ".//span[contains(text(), 'Check availability')]")))

【讨论】:

  • 我也用过但没用 - browser.find_elements_by_xpath(".//span[contains(text(), 'Check availability')]")
  • 可以使用click()方法点击元素browser.find_element_by_xpath(".//span[contains(text(), 'Check availability')]").click()
猜你喜欢
  • 2019-09-01
  • 1970-01-01
  • 2018-12-27
  • 2018-04-30
  • 2021-08-29
  • 2021-01-31
  • 2020-08-06
  • 2017-04-22
  • 1970-01-01
相关资源
最近更新 更多