I've written a script that successfully makes the login on Instagram. When I should go on my account, at home, the website displays a popup that asks you if you want notifications. At this point, I tried a lot of solutions, but I got nothing. I just want that, when the pop-up is displayed, the script should click on "Not now".
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
ids = []
driver = webdriver.Chrome(executable_path = '/usr/local/bin/chromedriver')
driver.get("https://www.instagram.com/accounts/login/?source=auth_switcher")
usm = driver.find_element_by_name('username').send_keys("**")
pwd = driver.find_element_by_name('password').send_keys("**")
btnLog = driver.find_element_by_tag_name('form').submit()
acpt = driver.find_element_by_xpath("//*[contains(@class, 'aOOlW   HoLwm ')]")
In the image, there's the line of the button highlighted that I want to click:

Try the following code for this:
from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
ui.WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
PS: I have used 10-second wait for the element to be clickable before click on it.
Hope it helps you!
import the following selenium classes to handle exceptions, send key, and create a time delay. and perform option 1 - option 3 to solve this problem
from selenium import webdriver
from selenium.common import NoSuchElementException, TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from time import sleep
# I used Chrome but you can used any browser
 
# ---- Optional - add options to keep the webpage open ----
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=options)
option 1) use path
try:
     notification_off = WebDriverWait(driver, 20).until(EC.presence_of_element_located(('xpath', '//*[@id="mount_0_0_LP"]/div/div/div[3]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[3]/button[2]')))
except TimeoutException:
    print("no such element found")
else:
    click_anywhere.click()
Option 2) if option 1 doesn't work. Search the button name
sleep(20)
try:
     not_off = driver.find_element('name', 'Not Now')
except NoSuchElementException:
     print('No such element found')
else:
      not_off.click()
Option 3) Find all button and use an if statement to find what you need
sleep(5)
try:
    notification_off = driver.find_elements('css selector', 'button')
except NoSuchElementException:
    print("notification element not found")
else:
    # dictionary comprehension
    not_off = [item for item in notification_off if item.text == "Not Now"]
    not_off[0].click()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With