I am trying to run some practice test on this webpage that prints the current positions of teams in this table:
https://www.premierleague.com/tables
but each time i run the script, I keep getting interrupted by a popup that I can’t seem to get Selenium to click.
I have tried adding a wait before clicking, but it keeps returning the same error
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <li role="tab" tabindex="0" data-tab-index="1">...</li> is not clickable at point (184, 396). Other element would receive the click: <iframe id="google_ads_iframe_/131332370/GeneralTakeover_0" name="google_ads_iframe_/131332370/GeneralTakeover_0" title="3rd party ad content" width="1600" height="900" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" role="region" aria-label="Advertisement" tabindex="0" srcdoc="" data-google-container-id="1" style="border: 0px; vertical-align: bottom;" data-load-complete="true"></iframe>
This is my code:
import pickle import pprint import time from selenium import webdriver def save_cookies(driver, location): pickle.dump(driver.get_cookies(), open(location, "wb")) def load_cookies(driver, location, url=None): cookies = pickle.load(open(location, "rb")) driver.delete_all_cookies() # have to be on a page before you can add any cookies, any page - does not matter which driver.get("https://www.premierleague.com/tables" if url is None else url) for cookie in cookies: if isinstance(cookie.get('expiry'), float):#Checks if the instance expiry a float cookie['expiry'] = int(cookie['expiry'])# it converts expiry cookie to a int driver.add_cookie(cookie) def delete_cookies(driver, domains=None): if domains is not None: cookies = driver.get_cookies() original_len = len(cookies) for cookie in cookies: if str(cookie["domain"]) in domains: cookies.remove(cookie) if len(cookies) < original_len: # if cookies changed, we will update them # deleting everything and adding the modified cookie object driver.delete_all_cookies() for cookie in cookies: driver.add_cookie(cookie) else: driver.delete_all_cookies() # Path where you want to save/load cookies to/from aka C:myfavdirectorycookies.txt cookies_location = "cookies.txt" # Initial load of the domain that we want to save cookies for chrome = webdriver.Chrome() # wait = WebDriverWait(chrome, 20) chrome.get("https://www.premierleague.com/tables") chrome.find_element_by_xpath("//button[normalize-space()='Accept All Cookies']").click() #popup i am trying to get rid of chrome.find_element_by_xpath("//a[class='closeBtn']").click() #after clicking the popup do this next chrome.find_element_by_xpath("(//li[@data-tab-index='1'])").click() save_cookies(chrome, cookies_location) chrome.quit() # Load of the page you cant access without cookies, this one will fail chrome = webdriver.Chrome() chrome.get("https://www.premierleague.com/tables")
Advertisement
Answer
I was able to fix the problem by adding an implicit wait after the finding the element. By asking Selenium to wait until the element appears I was able fix the error. I thinking selecting the element by ID instead of XPath also helped.
button = chrome.find_element_by_id('advertClose') chrome.implicitly_wait(10) ActionChains(chrome).move_to_element(button).click(button).perform()