#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()