Как перейти по ссылке на страницу с помощью Selenium Python

Моя ошибка:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"entrar"}

У меня есть HTML-код ниже:

<a role="menuitem" href="/login" class="_yce4s5">
  <div class="_hgs47m">
     <div class="_10ejfg4u">
       <div>
         Entrar
       </div>
     </div>
 </div> 
</a>

Я нажимаю затем ссылку entrar, следующий код на селене с python:

driver.implicitly_wait(10)
element = driver.find_element_by_link_text('Entrar')
element.click()

Но это вызывает это исключение NoSuchElementException.


person Davi Luis    schedule 13.12.2018    source источник
comment
Можете ли вы поделиться URL-адресом?   -  person Pedro Lobito    schedule 14.12.2018
comment
Пожалуйста, предоставьте полную информацию об ошибке   -  person G. Anderson    schedule 14.12.2018
comment
Потому что ваш текст находится в теге ‹div›, который не содержит ссылки. Вы можете найти тег ‹a выше другим методом (xpath / class / bs4 / requests)   -  person The BrownBatman    schedule 14.12.2018
comment
Делайте то, что говорит @The BrownBatman. Или вы можете найти ‹div›, как вы сейчас делаете, а затем перейти к тегу ‹a›, дважды перейдя к родительскому узлу.   -  person Roi    schedule 14.12.2018
comment
driver.find_element_by_link_text('Entrar') # Заглавная E   -  person Pedro Lobito    schedule 14.12.2018
comment
Я меняю Capital E, но та же ошибка.   -  person Davi Luis    schedule 14.12.2018


Ответы (3)


Вы пробовали использовать верхний регистр для первой буквы? например 'Entrar' вместо 'entrar'

person Jon bon jovi    schedule 13.12.2018
comment
Спасибо, но это не решение. - person Davi Luis; 14.12.2018
comment
@DaviLuis, попробуй driver.find_element_by_partial_link_text('Entrar'). Тег привязки содержит другие теги помимо текста. - person derloopkat; 14.12.2018

Вы можете попробовать driver.find_element_by_partial_link_text('entrar'), потому что, вероятно, в вашей ссылке есть другой текст. Мне нравится получать элемент по xpath. Это довольно просто. Если у вас есть Firefox, просто установите надстройку xpath Finder, чтобы найти xpath к любому элементу на веб-странице.

person Mike C.    schedule 13.12.2018

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

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[role='menuitem'][href='/login'] > div > div > div"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@role='menuitem' and @href='/login']//div[normalize-space()='Entrar']"))).click()
    
  • Примечание. Вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
person DebanjanB    schedule 14.12.2018