[Python] Python Selenium Headless Webdriver`s window_handles doesn`t see new windows

Discussão em 'Python' iniciado por Stack, Janeiro 12, 2025.

  1. Stack

    Stack Membro Participativo

    In my python code I initialize selenium chrome webdriver with certain parameters, open a web page, click a button which does open a new window if I comment chrome_options.add_argument("--headless") line. Then I switch to driver.window_handles[-1]. If I run code without chrome_options.add_argument("--headless") line, driver.window_handles returns 2 windows, if I run in headless mode, driver.window_handles returns 1 window only. I have tried adding delay up to 300 seconds, it does not help. Then code crashes because driver can not find button from an unopened window. Take a look at the code:

    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
    )



    How to open a new window triggered by button click and switch to it while running selenium in headless mode?

    Continue reading...

Compartilhe esta Página