selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: невозможно определить ошибку элемента с помощью Selenium до Python - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь автоматизировать вход на свой веб-сайт, используя селен.

Я захожу на этот сайт: 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('myemail@gmail.com', 'password1234')
ed.login()

Но ошибка происходит:

selenium.common.exceptions.NoSuchElementException: Сообщение: такого элемента нет: Невозможно найти элемент: {"method": "css selector", "selector": ". textinput textInput контроль формы "}

Это мой веб-сайт, поэтому я уверен в классе, и я посмотрел на SO, и ответы говорили о Ифраме, у меня нет ни одного.

Я пытался с классом, id et c. все работает, кроме как не заполняет ввод.

Ответы [ 2 ]

0 голосов
/ 17 января 2020

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

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

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


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

  • Использование find_element_by_class_name() Вы не сможете передать несколько имен классов. При прохождении нескольких классов вы столкнетесь с ошибкой:

    Message: invalid selector: Compound class names not permitted
    
  • Соответствующее подробное обсуждение можно найти в Недопустимый селектор: имена составных классов не разрешены с использованием find_element_by_class_name с Webdriver и Python

  • Вместо этого вы могли бы использовать следующий CSS_SELECTOR в качестве действительного селектора:

    email = bot.find_element_by_css_selector('input.textinput.textInput.form-control')
    
  • Но приведенный выше CSS_SELECTOR не не идентифицирует нужный элемент однозначно.


Чтобы отправить последовательность символов в поле Identifiant , вы должны вызвать 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

0 голосов
/ 17 января 2020

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

...