selenium.common.exceptions.NoSuchElementException: сообщение: нет такого элемента: невозможно найти ошибку элемента с помощью Selenium через Python

Я пытаюсь автоматизировать вход на свой сайт с помощью селена.

Я захожу на этот веб-сайт: http://front-desk.fr/users/accounts/login/?next=/

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

chrome_path = r"C:\Users\gaeta\OneDrive\Bureau\chromedriver.exe"

class FrontDesk:
    def __init__(self,username,password):
        self.username = username
        self.password = password
        self.bot = webdriver.Chrome(chrome_path)

    def login(self):
        bot = self.bot
        bot.get("http://front-desk.fr/users/accounts/login/")
        time.sleep(5)
        email = bot.find_element_by_class_name('textinput textInput form-control')
        email.send_keys(self.username)



ed = FrontDesk('[email protected]', 'password1234')
ed.login()

Но возникает ошибка:

selenium.common.exceptions.NoSuchElementException: сообщение: нет такого элемента: невозможно найти элемент: {"метод": "селектор CSS", "селектор": ". textinput textInput form-control"}

Это мой веб-сайт, поэтому я уверен в классе, я посмотрел на SO, и в ответах говорилось об Iframe, у меня их нет.

Я пробовал с классом, идентификатором и т. Д., Все работает, за исключением того, что он не заполняет ввод.


person Community    schedule 17.01.2020    source источник
comment
Имена составных классов не допускаются. Взгляните на: stackoverflow.com/questions / 37771604 /   -  person Casper    schedule 17.01.2020
comment
Отвечает ли это на ваш вопрос? Имена классов Selenium Compound запрещены   -  person hiropon    schedule 17.01.2020
comment
@hiropon Спасибо! Я использовал другой фильтр, и теперь он работает, еще раз спасибо!   -  person    schedule 17.01.2020


Ответы (2)


Это сообщение об ошибке ...

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".textinput textInput form-control"}

... означает, что ChromeDriver не смог найти нужный элемент в контексте просмотра, то есть в сеансе браузера Chrome.


Вам нужно позаботиться о нескольких вещах, а именно:


Чтобы отправить последовательность символов в поле Идентификатор, вы должны вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующих Стратегии поиска:

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

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#id_login"))).send_keys(self.username)
    
  • Использование XPATH:

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='id_login']"))).send_keys(self.username)
    
  • Примечание. Вам необходимо добавить следующий импорт:

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

tl; dr

Вы можете найти соответствующее подробное обсуждение NoSuchElementException в Selenium« selenium.common.exceptions.NoSuchElementException »при использовании Chrome

person DebanjanB    schedule 17.01.2020

Исходный код HTML недействителен, есть много незакрытых тегов, например, для ваших таблиц стилей. Исправьте это и попробуйте еще раз.

person Stephen Straton    schedule 17.01.2020
comment
Хм, я не знаю, куда вы идете ... это действительно, селен просто ищет идентификатор или тег ... Мне удалось заставить его работать, вызвав фильтр имени. Должен сказать, ваш ответ бесполезен. - person ; 17.01.2020
comment
Попробуйте пропустить html через валидатор xml, и вы увидите, что я имею в виду в отношении того, что он недействителен из-за незакрытых тегов. Это больше не важно, поскольку вы решили свою проблему. - person Stephen Straton; 17.01.2020