Skip to content
Advertisement

How to click through multiple elements with same XPATH in selenium using for loop?

I’m trying to web scrape different elements with same class name. The following statements works well.

browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[1]").click()
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[2]").click()

… and so on.

Now, if I put this in a loop, it doesn’t work. Looks like, it doesn’t recognize (//div[@class= ‘jumbo-tracker’])[i]

Here’s the code:

for i in range(1,length+1):
    browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[i]").click()
    sleep(5)
    browser.find_element(By.XPATH, "//div[@class='sc-1y3q50z-3 eiMLBn']").click()
    sleep(5)
    sno.append(restaurant)
    restaurant_name= browser.find_element(By.XPATH,"//h1[contains(@class, 'sc-7kepeu-0 sc-kafWEX kTxZkY')]").text
    name.append(restaurant_name)
    browser.back()
    browser.back()
    sleep(5)

Here’s the exception:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"(//div[@class= 'jumbo-tracker'])[i]"}

Please, help.

Advertisement

Answer

range()

The range() function creates a sequence of numbers.

So while passing the variable within the xpath using f-strings you need to convert the number as string for variable substitution and you can use the following line of code:

for i in range(1,length+1):
        browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{str(i)}]").click()
Advertisement