Search code examples
pythonseleniumwebpopupwindow

I'm trying to automate a process on a website. How do I close a pop up window with selenium, when it is not clear when the popup window will appear?


I am trying to close a pop up window with selenium in python, which is not allowing my code to execute further. But I am unable to do that. There is a a pop up window which asks me if i want to sign up but it keeps popping up at inconsistent times. Is there a method to check wether or not the pop-up window is active?

My code so far:

    import selenium
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time 

    PATH = "C:\Program Files (x86)\chromedriver.exe";
    driver = webdriver.Chrome(PATH);



    driver.get("https://www.investing.com/news/")
    time.sleep(3)
    accept_cookies = driver.find_element_by_xpath('//*[@id="onetrust-accept-btn-handler"]');
    accept_cookies.click();
    

Solution

  • So your problem is that you don't want the signup popup to display.

    I was just poking the site's script, I found a really nice way for you to work around it: set user agent to gene. The script to display popup will be disabled if user agent matches some mobile browsers.

    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    opts = Options()
    opts.add_argument("user-agent=gene")
    driver = webdriver.Chrome(options=opts)
    
    # Adds the cookie into current browser context
    driver.get("https://www.investing.com/news/")
    
    time.sleep(60) # wait for a minute to see if the popup happens
    driver.quit()
    

    Run this code, observe the page, it will not display the signup popup.


    Alternative work around: Use a Chrome profile that already turned off the Signup popup, will also not display the popup

    from selenium import webdriver
    
    options = webdriver.ChromeOptions() 
    options.add_argument("user-data-dir=C:\\Path") #Path to your chrome profile
    

    If you really need to close the popup without these methods, define a check function with try/except. Before doing any actions, call this function to check if there's popup, then close the popup, save the state to some variable (so you don't check it anymore). Since the function has try/except, it will not raise Exception and your code will run.