ElementNotInteractableException: элемент не взаимодействует, ошибка при отправке текста в поле электронной почты - PullRequest
1 голос
/ 22 февраля 2020

Настройка

Попытка войти в эту форму входа с использованием Python и Selenium.


Код

url = 'https://activeshop.com.pl/customer/account/login/'
browser.get(url)


# fill out login details 
account_name = 'my@email.com' 
password = 'mypassword' 

login_details = {
                'login': account_name,
                'password': password
                }

# inserts account name in login field      
fill_field('id','email',login_details['login'])      

# inserts password in password field
fill_field('id','pass',login_details['password'])   

где,

def fill_field(type, type_path, input):
    if type == 'id':
        field = browser.find_element_by_id(type_path)        
    field.clear()
    field.send_keys(input)

Выпуск

Приведенный выше код работал, но поскольку сайт получил перестройку, он выдает ElementNotInteractableException: element not interactable при попытке заполнить поля.

Я пробовал Xpaths, CSS селекторы и еще много чего, но адрес электронной почты и пароль не заполнены.

Я могу получать тексты на странице через Selenium.

Что-то блокирует селен в элементах input. Любые идеи?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2020

На странице более 1 email, а первая не видна. Вы можете получить все элементы и затем отфильтровать их по видимому:

field = list(filter(lambda x: x.is_displayed(), browser.find_elements(By.ID, "email")))[0]
field.send_keys("email")
1 голос
/ 23 февраля 2020

Чтобы отправить последовательность символов в поля E-mail и Hasło , вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать следующие Стратегия локатора :

  • Использование XPATH:

    driver.get("https://activeshop.com.pl/customer/account/login/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='E-mail']//following::input[@class='input-text' and @id='email']"))).send_keys("my@email.com")
    driver.find_element_by_xpath("//span[text()='Hasło']//following::input[@class='input-text' and @title='Hasło']").send_keys("mypassword")
    
  • Примечание : Вы необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

activeshop_com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...