#python #selenium
Вопрос:
Я пытаюсь отправить ключи на имя пользователя и пароль, чтобы я мог войти на следующий веб-сайт (да, мобильная версия):
Я всегда получаю одну и ту же ошибку:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: [object HTMLInputElement] has no size and location
(Session info: chrome=91.0.4472.164)
Мой код таков:
Username = driver.find_element_by_xpath('//*[@id="UserName"]')
driver.execute_script("arguments[0].click();", Username)
Username.send_keys("xx.xxx.xxx-x")
Код, вызывающий ошибку, выглядит следующим образом:
Username.send_keys("xx.xxx.xxx-x")
Спасибо!
Ответ №1:
Я вижу, что на странице несколько входных данных, поэтому попытался получить к ней доступ с помощью индексов элементов
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
username= WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "((//input[@id='UserName'])[2])")))
username.send_keys("Username")
password= WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "((//input[@id='Password'])[2])")))
password.send_keys("passowrd")
Поэтому выше я только что проверил наличие элемента с excplicitWait
и send_keys на входе
Комментарии:
1. Идеально!! Большое спасибо.
Ответ №2:
На этой странице есть 2 элемента, соответствующие //*[@id="UserName"]
селектору XPath. Первый — это не файл, с которым пользователь send_keys
вводит данные .
Поэтому нажатие на него, особенно нажатие на него с помощью JavaScript, просто ничего не делает, в то время как отправка строкового ввода с помощью Selenium send_keys
не допускается.
Вы должны сделать 2 вещи, чтобы ваш код работал здесь:
- Установите явное ожидание загрузки страницы перед доступом к элементу.
- Чтобы использовать правильный локатор.
Попробуйте это:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 20)
username = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='panel' and contains(@style,'block')]//*[@id='UserName']")))
username.click()
username.send_keys("xx.xxx.xxx-x")