Селен: такого элемента нет: Не удается найти элемент:

#python #python-3.x #selenium #selenium-webdriver #selenium-chromedriver

Вопрос:

У меня есть вопрос о Селене.

Моя идея:

Моя идея состоит в том, чтобы создать скрипт на Python, который будет входить на этот веб-сайт. Селен отправляет имя пользователя и пароль в поле ввода HTML и отправляет его.

Проблема:

Мой код продолжает говорить:

 Message: no such element: Unable to locate element:  

Я попробовал этот код с google.com например, и это работает. Почему это не работает с этой страницей входа в систему? Кто-нибудь может мне помочь, пожалуйста?

Мой код на Python:

 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time   login_URL = ""   driver = webdriver.Chrome() driver.get(login_URL)  time.sleep(5)  inputElement = driver.find_element_by_name('uname') inputElement.send_keys(username)  time.sleep(20)  driver.close()  

Комментарии:

1. Очевидный ответ заключается в том, что на странице нет никакого элемента с name="uname" .

2. ваши поля ввода находятся внутри рамки. Вам нужно переключиться на рамку, чтобы получить доступ к элементам.

Ответ №1:

я не знаю, как это работает в pyton, я использую js, но попробуйте использовать драйвер xpath.find_element_by_xpath («ваш xpath») [возможно, используйте еще 1 щелчок) («элемент xpath»). нажмите() — элемент активен. и после использования отправить ключи ******.send_keys(‘имя пользователя’)

driver.switchTo().frame(драйвер.findElement(По.xpath(‘кадр xpath’))) — в js

Ответ №2:

Как уже объяснялось, элемент находится в an iframe . Нужно switch to frame взаимодействовать со стихией.

Было бы лучше применить явное ожидание.

 # Imports required: from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By  driver.get("https://nl.infothek-sptk.com/isps/infothek/?1043")  wait = WebDriverWait(driver,30)  wait.until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"body_frame")))  wait.until(EC.element_to_be_clickable((By.NAME,"uname"))).send_keys("username@mail.com") # Code to enter other fields.  # Switch back to default to interact with elements outside the iframe. driver.switch_to.default_content()