【问题标题】:Trying to click on a button with multiple texts on it using selenium尝试使用硒单击带有多个文本的按钮
【发布时间】:2021-08-04 15:30:20
【问题描述】:

我正在尝试根据其中的文本找到一个按钮。编译器给了我这个信息:) ...不是有效的 XPath 表达式。

vyber2 = driver.find_elements_by_xpath( '//*[contains(text(), " komplexe Behandlung \"Classic\" ")]')

照片上是下拉菜单的图片。我需要在其中一个选项上找到包名称并单击它。 (比如我需要点击“Komplexe Behandlung Classic”包as shown on this picture

我打开下拉菜单的代码:

`#open the dropdown menu
vyber1 = driver.find_element_by_xpath(
    '//*[@id="packageSelectorContainer"]/div[2]/div/div[1]/div[2]/div')
    # Make click in that button
ActionChains(driver).move_to_element(vyber1).click(vyber1).perform()

#wait again
timeout = 5
WebDriverWait(driver, timeout)
try:
    element_present = EC.presence_of_element_located((By.ID, '//*[@id="packageSelectorContainer"]/div[2]/div/div[1]/div[2]/ul/li[3]'))
    WebDriverWait(driver, timeout).until(element_present)
except TimeoutException:
    print("Timed out waiting for page to load")
#pick the desired package based on its name
vyber2 = driver.find_elements_by_xpath(
    '//*[@id="packageSelectorContainer"]/div[2]/div/div[1]/div[2]/ul/li[3]')
    # Make click in that button
ActionChains(driver).move_to(vyber2).click(vyber2).perform()`

感谢您的帮助!

【问题讨论】:

  • 你能把链接发布到包含按钮的网页吗?
  • 从那个链接,访问按钮所在面板的过程是什么?
  • 我更新了问题,以便您可以看到代码...谢谢
  • 当我加载页面并单击下拉菜单时,我只看到两个下拉选项,并且每次都会自动选择komplexe Behandlung "Classic"。下拉选项的数量是否可能会有所不同,或者是否有另一个过程可以切换全套下拉选项(如屏幕截图所示)?

标签: python selenium xpath


【解决方案1】:

获取带有文本 komplexe Behandlung "Classic" 且当前未选中的按钮选项的一种方法是通过 driver.execute_script 使用 Javascript:

from selenium import webdriver
d = webdriver.Chrome('/path/to/chromedriver')
d.get('https://www.sanatoriums.com/de/karlsbad/kurhotel-imperial-991/preise-zimmer?ar=2021-09-18&de=2021-10-02&ro=120&se=fbt')
elems = d.execute_script("""
  function* get_buttons(text){
     for (var i of document.querySelectorAll('div.flex-item.person-package.dropdown ul.dropdown-menu li.flex-grid')){
        if (!i.getAttribute('class').includes(' selected')){
           if (i.querySelector('div.package-title').textContent.includes(text)){
              yield i
           }
        }
     }
  }
  return [...get_buttons('komplexe Behandlung \"Classic\"')]
""")

【讨论】:

  • 我无法让它工作 :( 但非常感谢!
  • 也很抱歉回复晚了,这几天我病得很重,无法编码
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多