OP code without additional import
The error is due to the fact that the XPaths tab site OP does not want to touch. This one has a space. For example, now I can’t find
// * [@id = "KambiBC-contentWrapper__bottom"] / div / div / div / div / div [3] / div 1 / div / div [3] / div [2] / DIV / DIV / DIV [ 2 ] / title
Some time ago, before the game comes out live, I can’t find
// * [@id = "KambiBC-contentWrapper__bottom"] / div / div / div / div / div [3] / div 1 / div / div [3] / div [2] / DIV / DIV / DIV [ 1 ] / title
When I talk about index , I mean the bold part above.
When the game goes live, the tab suddenly turns the index from 2 to 1. (The bold part changes.) In both cases there are spaces: either 1 cannot be found, or 2 cannot be found.
The reason for the presence of a space , I think, is that between them there is no other element that cannot be clicked. See the figure below. 
league is the cause of the gap. Thus, whenever the code hits the league index, it does not execute . Since the league button and other tabs switch the league position and live game, the indices are swapped when changing positions. (I think that why I can’t find the Xpath when the bold part is the first, and later cannot find that it is 2.)
Below is a piece of code from OP. You can see that at the end is str (index + 1).
indexes = [index for index in range(len(options))] # shuffle(indexes) # the OP use shuffle from random. Still 0 and 1 is contained. path = '(//div[@class="KambiBC-collapsible-container KambiBC-mod-event-group-container"])' for index in indexes: # Because there are some indexes are missing because of League button, # nothing can be found at the index and it times out. clickMe = wait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, path + '[%s]' % str(index + 1))))
Decision
Try catching a timeout exception to skip this league occupied index. You can also save a counter to exclude only one timeout exception per page. If there is a second timeout, you know that there is something wrong, except for the league button and should stop.
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import TimeoutException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time driver = webdriver.Firefox() driver.set_window_size(1024, 600) driver.maximize_window() wait = WebDriverWait driver.get('https://www.unibet.com.au/betting#filter/football') time.sleep(5) options = driver.find_elements_by_xpath("""//*[@id="KambiBC-contentWrapper__bottom"]/div/div/div/div/div[3]/div[1]/div/div[3]/div[2]/div/div/div""") print("Total tabs that we want to open is {}".format(len(options))) indexes = [index for index in range(len(options))] for index in indexes: print(index) try: clickMe = wait(driver, 5).until(EC.presence_of_element_located((By.XPATH, """//*[@id="KambiBC-contentWrapper__bottom"]/div/div/div/div/div[3]/div[1]/div/div[3]/div[2]/div/div/div[{}]/header""".format(str(index+1))))) clickMe.click() except TimeoutException as ex: print("catch you! {}".format(index)) pass