Элемент, с которым невозможно взаимодействовать при отправке ключей, даже после успешного щелчка

#python #selenium

Вопрос:

Я пытаюсь отправить ключи на имя пользователя и пароль, чтобы я мог войти на следующий веб-сайт (да, мобильная версия):

https://m.bancosecurity.cl/

Я всегда получаю одну и ту же ошибку:

 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 вещи, чтобы ваш код работал здесь:

  1. Установите явное ожидание загрузки страницы перед доступом к элементу.
  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")