Python Selenium: не удается определить локатор для кликабельного элемента ссылки - PullRequest
0 голосов
/ 22 июня 2019

Я использую Селен Python 3 и пытался, но мне нужна помощь в поиске интерактивного элемента ссылки xpath.

Моя последняя попытка матча xpath показывать 1 из 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 голосов
/ 22 июня 2019

Чтобы щелкнуть по элементу, используйте WebDriverWait и element_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
0 голосов
/ 22 июня 2019

Требуемый элемент является JavaScript включенным элементом, поэтому click() для элемента, который вы должны заставить WebDriverWait , чтобы элемент был кликабельным , и выможно использовать любое из следующих решений:

  • Использование LINK_TEXT:

    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
    
0 голосов
/ 22 июня 2019

явное ожидание -Ядное ожидание - это код, который вы определили для ожидания определенного условия, прежде чем продолжить работу в коде

browser.find_element_by_link_text("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

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