Веб-драйвер Python Selen найти и нажать ссылки - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть столбец таблицы с четырьмя ссылками в одной и той же ячейке:

<td>
<a href="", onclick=showPricing('1234567','P', 'xyz123456', )>pdf,</a>
<a href="", onclick=showPricing('1234567','C', 'xyz123456', )>csv,</a>
<a href="", onclick=showPricing('1234567','X', 'xyz123456', )>xls,</a>
<a href="", onclick=showPricing('1234567','XP', 'xyz123456', )>xlsp</a>
</td>

Я хочу нажать на четвертую ссылку, текст "xlsp", но не могу.

Что я пробовал:

1) driver.find_element_by_xpath('//a[contains(@onclick, "xyz123456")]').click()

это, конечно, первый клик: pdf

2) driver.find_element_by_xpath('//a[contains(@onclick, "xyz123456")][contains(text(), "xlsp")]').click()

это выбирает четвертый, но ошибка с ".... errorElement не может быть прокручен в поле зрения"

3) driver.find_elements_by_xpath('//a[contains(@onclick, "xyz123456")]')[3].click()

это возвращает ту же ошибку, что и 2)

Любые предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я протестировал несколько вариантов, включая предложение @ DebanjanB, и считаю, что это самое надежное решение:

driver.execute_script(dr.find_element_by_xpath('//a[contains(@onclick, "xyz123456")][contains(@onclick, "XP")]').get_attribute("onclick"))
0 голосов
/ 04 декабря 2018

Чтобы щелкнуть четвертую четвертую ссылку с текстом xlsp , можно использовать одно из следующих решений:

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td a[onclick*='XP']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@onclick,'XP') and contains(.,'xlsp')]"))).click()
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...