selenium 无法在ul列表中定位和单击li元素

stszievb  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(384)

我试图点击ul下拉列表中的li元素。我想选择"上个月",但得到这个错误:消息:没有此元素:找不到元素
下面是我的代码:

def click_on(xpath):
    timeout = time.time() + 30
    while True:
        try:
            driver.find_element(By.XPATH, xpath).click()
            break
        except Exception:
            if time.time() > timeout:
                msgbox('Process timed out after 30 seconds.', 'Error')
                exit()

click_on('//*[@id="popover_otrppv916b"]/div/div[2]/div[1]/div/div/div/div/ul/li[9]/div/span')

下面是html:

我还尝试只单击<div>标记,只单击<li>标记(而不是<span>标记),但得到了相同的错误。

sgtfey8w

sgtfey8w1#

  • id * 属性值(如 * popover_otrppv916b *)是动态生成的,迟早会更改。它们可能会在下次重新访问应用程序时更改,甚至在下次启动应用程序时更改。因此不能在定位器中使用。

溶液
要单击文本为***Last month***的***clickable***元素,需要为element_to_be_clickable()引入WebDriverWait,可以使用以下locator strategies之一:

  • 使用 * XPATH * 和 * normalizespace() *:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='group-list']//li//span[normalizespace()='Last month']"))).click()
  • 使用 * XPATH * 和 * contains() *:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='group-list']//li//span[contains(., 'Last month')]"))).click()
      • 注意**:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

相关问题