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

Я пробовал все сообщения с тем же вопросом от других, но ни один из них не работал в моем случае. Мне нужно написать сценарий, чтобы получить оптовые цены для указанного ниже веб-сайта:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

LoginURL = "https://www.coffeeparts.com.au/customer/account/login/"

driver = webdriver.Chrome("C:/chromedriver.exe")
driver.delete_all_cookies()

driver.get(LoginURL)

email = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'email')))
email.send_keys("test")

driver.close()

Для любых версий кода, которые я пробовал, я всегда получаю одну и ту же ошибку. Мне нужно запустить метод send_keys для полей электронной почты и пароля, а затем нажать кнопку входа в систему. После этого я получу информацию о сеансе входа в систему для запуска скриптов веб-скребка для получения оптовых цен на товары.

---------------------------------------------------------------------------
ElementNotInteractableException           Traceback (most recent call last)
<ipython-input-14-ee71e5f9bc26> in <module>()
     13 
     14 email = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'email')))
---> 15 email.send_keys("test")
     16 
     17 driver.close()

c:\python27\lib\site-packages\selenium\webdriver\remote\webelement.pyc in send_keys(self, *value)
    477         self._execute(Command.SEND_KEYS_TO_ELEMENT,
    478                       {'text': "".join(keys_to_typing(value)),
--> 479                        'value': keys_to_typing(value)})
    480 
    481     # RenderedWebElement Items

c:\python27\lib\site-packages\selenium\webdriver\remote\webelement.pyc in _execute(self, command, params)
    631             params = {}
    632         params['id'] = self._id
--> 633         return self._parent.execute(command, params)
    634 
    635     def find_element(self, by=By.ID, value=None):

c:\python27\lib\site-packages\selenium\webdriver\remote\webdriver.pyc in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

c:\python27\lib\site-packages\selenium\webdriver\remote\errorhandler.pyc in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

ElementNotInteractableException: Message: element not interactable

Пожалуйста, помогите. Большое спасибо.

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы были близки. Но локаторы, которые вы использовали, определяли поле Адрес электронной почты из wholesale-login-form, вместо этого вам нужно было идентифицировать поле Адрес электронной почты из login-form

Решение

Чтобы отправить последовательность символов в поле Адрес электронной почты , вы должны вызвать WebDriverWait для element_to_be_clickable() и вы можно использовать любую из следующих Стратегий локатора :

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

    driver.get("https://www.coffeeparts.com.au/customer/account/login/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form#login-form ul.form-list input#email"))).send_keys("vietnguyenswin")
    
  • Использование XPATH :

    driver.get("https://www.coffeeparts.com.au/customer/account/login/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[text()='Registered Customers']//following::ul[1]//input[@id='email']"))).send_keys("vietnguyenswin")
    
  • Примечание : вам необходимо добавить следующие импорты:

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

selenium.common.exceptions.ElementNotInteractableException: сообщение: элемент не взаимодействует при нажатии на элемент с использованием Selenium Python

ElementNotInteractableException: Сообщение: элемент не взаимодействует, ошибка отправки текста в поле поиска с использованием Selenium Python
0 голосов
/ 12 июля 2020

Спасибо всем, я все еще хотел бы знать, как вы можете сделать это с помощью Selenium. Я решил проблему получения оптовой цены другим методом:

s = requests.Session()

Затем я передаю файлы cookie методу get:

req = s.get(URL, cookies=cookies, headers=headers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...