ошибка "element not interactable" в Selenium возникает только при использовании headless браузера
Есть код:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("--start-maximized")
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
driver.get("https://github.com/")
WebDriverWait(driver, 60).until(EC.presence_of_element_located((
By.XPATH, "//input[@name='q']")))
search_field = driver.find_element(By.XPATH, "//input[@name='q']")
search_field.clear()
search_field.send_keys('github')
При выполнении возникает ошибка:
Traceback (most recent call last):
File "C:/Users/user/AppData/Local/Programs/Python/Python38/отладка selenium.py", line 16, in <module>
search_field.clear()
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 109, in clear
self._execute(Command.CLEAR_ELEMENT)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 396, in _execute
return self._parent.execute(command, params)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 429, in execute
self.error_handler.check_response(response)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: headless chrome=106.0.5249.62)
Stacktrace:
Backtrace:
Ordinal0 [0x00EC1ED3+2236115]
Ordinal0 [0x00E592F1+1807089]
Ordinal0 [0x00D665C0+812480]
Ordinal0 [0x00D8DE37+974391]
Ordinal0 [0x00DB1A8C+1120908]
Ordinal0 [0x00D8BD84+966020]
Ordinal0 [0x00DB1CA4+1121444]
Ordinal0 [0x00DC59E2+1202658]
Ordinal0 [0x00DB18A6+1120422]
Ordinal0 [0x00D8A73D+960317]
Ordinal0 [0x00D8B71F+964383]
GetHandleVerifier [0x0116E7E2+2743074]
GetHandleVerifier [0x011608D4+2685972]
GetHandleVerifier [0x00F52BAA+532202]
GetHandleVerifier [0x00F51990+527568]
Ordinal0 [0x00E6080C+1837068]
Ordinal0 [0x00E64CD8+1854680]
Ordinal0 [0x00E64DC5+1854917]
Ordinal0 [0x00E6ED64+1895780]
BaseThreadInitThunk [0x76A4336A+18]
RtlInitializeExceptionChain [0x77659902+99]
RtlInitializeExceptionChain [0x776598D5+54]
Если я удалю строку options.add_argument("--headless"), то в браузере с отображением (не headless) всё работает отлично.
Github как пример, такая же ситуация и с другими сайтами. Элемент search_field к моменту исполнения кода уже должен присутствовать, т.к. у меня задано ожидание. Даже sleep добавлял, и это не помогло, стало быть, дело не в этом.
Ответы (1 шт):
Автор решения: Tester
→ Ссылка
Решил проблему добавлением в код строки:
options.add_argument("--window-size=1366,768")