Window_handles Python Selenium Headless Webdriver не видит новые окнаPython

Программы на Python
Ответить
Anonymous
 Window_handles Python Selenium Headless Webdriver не видит новые окна

Сообщение Anonymous »

В моем коде Python я инициализирую веб-драйвер Selenium Chrome с определенными параметрами, открываю веб-страницу, нажимаю кнопку, которая открывает новое окно, если я комментирую строку chrome_options.add_argument("--headless"). Затем я переключаюсь на driver.window_handles[-1].
Если я запускаю код без строки chrome_options.add_argument("--headless"), driver.window_handles возвращает 2 windows, если я запускаю в безголовом режиме, driver.window_handles возвращает только 1 окно. Пробовал добавлять задержку до 300 секунд, не помогает. Затем код выходит из строя, потому что драйвер не может найти кнопку в неоткрытом окне. Взгляните на код:

Код: Выделить всё

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("--start-maximized")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument(f"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0")
chrome_options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=chrome_options)
wait = WebDriverWait(driver, 30)

def main():
driver.get("...")
time.sleep(60) # no matter how long is the delay, the outcome doesn`t change

button = wait.until(ec.element_to_be_clickable((By.XPATH, "...")))
button.click()
# after button above is clicked, a new window must be opened

time.sleep(60)
print(f"WINDOW HANDLES: {driver.window_handles}")
# for headless chrome prints WINDOW HANDLES: ['24931185E13B5F865C2AF60824C63581']
# normally prints WINDOW HANDLES: ['2C26F32DB25AF6BA3385E57788A9A0F0', '573A622D02011B22274612B2AA81C8DC']

driver.switch_to.window(driver.window_handles[-1])

button = wait.until(ec.element_to_be_clickable((By.XPATH, "...")))
button.click()
# in headless mode raises exception as new window where button is to be found is not opened
)

Как открыть новое окно, вызываемое нажатием кнопки, и переключиться на него при запуске selenium в безголовом режиме?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ew-windows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»