Ошибка выполнения действия на странице
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get('https://translate.yandex.ru')
print(driver.title)
Ошибки нет. Но если добавить
z = driver.find_element_by_id('textarea').send_keys('123')
print(z)
возникает ошибка:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: headless chrome=87.0.4280.88)
Как сделать так, чтобы выполнять действия в невидимом браузере без ошибок?
Ответы (1 шт):
Вообще у вас здесь несколько недочетов в работе со страницей:
К моменту выполнения скрипта искомый элемент еще может быть не готов к использованию. Такое возможно, если элементы на странице создаются с помощью js-скриптов. Самый простой способ это проверить - добавить небольшую задержку перед обращением к странице. Обычно достаточно пары секунд
import time time.sleep(2)Я посмотрел на указанную вами страницу в инструментах разработчика браузера. Там хорошо видно, что работать следует с другим элементов, который имеет
id = 'fakeArea'. Именно в этот элемент вводится текст.z = driver.find_element_by_id('fakeArea')Если вы сами поработаете со страницей с выведенными параллельно инструментами разработчика, то видно, что действия с элементом вы начинаете с клика по нему. При этом js-код реагирует на этот клик и происходит большое количество изменений других элементов. Советую в коде сделать так же - сперва кликнуть по нему, а затем вводить текст.
z.click() z.send_keys('123') print(z)
В итоге получится вот такой код:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get('https://translate.yandex.ru')
print(driver.title)
time.sleep(2)
z = driver.find_element_by_id('fakeArea')
z.click()
z.send_keys('123')
print(z)