ошибка "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")
→ Ссылка