Python Selenium:无法确定可单击链接元素的定位器

时间:2019-06-22 03:43:51

标签: python selenium xpath css-selectors webdriverwait

我正在使用Selenium python 3,并且已经尝试过,但是在寻找可点击链接元素xpath时需要帮助。

我在xpath上的最后一次尝试显示了1个匹配项,但仍然无法提取元素:

elem_available=browser.find_element_by_xpath("//a[contains(@href,'#')] //parent::td[@class='noSCL']//parent::tr['@']//parent::tbody['@']//parent::table[@class='status-buttons']//parent::div[@id='status-buttons-on-break']")

元素 enter image description here

3 个答案:

答案 0 :(得分:0)

explicit-waits-显式等待是您定义的代码,用于在继续执行代码之前先等待特定条件发生

browser.find_element_by_link_text("Available").click()

OR

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.LINK_TEXT, "Available"))).click()

答案 1 :(得分:0)

要使用WebDriverWaitelement_to_be_clickable单击元素。请尝试以下xpath

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='status-buttons-work-offline']//table[@class='status-buttons']//tr//td//a[contains(.,'Available')]"))).click()

您需要使用以下导入。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

答案 2 :(得分:0)

所需元素是启用了JavaScript的元素,因此对元素click()进行LINK_TEXT诱使 WebDriverWait 以便使元素可点击您可以使用以下任一解决方案:

  • 使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Available"))).click()

    CSS_SELECTOR
  • 使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#status-buttons-work-offline > table.status-buttons > tr > td a[onclick^='AgentStatusController']"))).click()

    XPATH
  • 使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='status-buttons-work-offline']/table[@class='status-buttons']/tr/td//a[starts-with(@onclick, 'AgentStatusController') and contains(.,'Available')]"))).click()

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 注意:您必须添加以下导入:

    SELECT CASE C WHEN 1 THEN A ELSE B END FROM T WHERE C IN (1,2);