Using Selenium in Python to click through all elements with the same class name

21,402

This is unfortunate, you got two halves of the whole, you cannot find multiple elements by id as ID is unique to a single element.

so combine the iterative method you use with id and the find by elements with classes to get:

like = browser.find_elements_by_class_name('like_picto_unselected')
for x in range(0,len(like)):
    if like[x].is_displayed():
        like[x].click()

I strongly suspect this will work for you. Please tell me if not.

Share:
21,402
Gus Gabel
Author by

Gus Gabel

Updated on July 11, 2020

Comments

  • Gus Gabel
    Gus Gabel almost 4 years

    I am trying to click on all of the "like" buttons on a webpage. I know how to click on one of them, but I'd like to be able to click them all. They have the same class name, but different id's.

    Do I need to create some sort of list and tell it to click on each one of the items on the list? Is there a way to write "click all"?

    Here's what my code looks like (I removed the login code):

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    browser = webdriver.Firefox()
    browser.set_window_size(650, 700)
    browser.get('http://iconosquare.com/viewer.php#/tag/searchterm/grid')
    
    mobile = browser.find_element_by_id('open-menu-mobile')
    mobile.click()
    search = browser.find_element_by_id('getSearch')
    search.click()
    search.send_keys('input search term' + Keys.RETURN)
    
    #this gets me to the page I want to click the likes
    fitness = browser.find_element_by_css_selector("a[href*='fitness/']")
    fitness.click()
    
    #here are the different codes I've tried to use to click all of the "like buttons"
    
    #tried to create a list of all elements with "like" in the id and click on all of them.  It didn't work.
    like = browser.find_elements_by_id('like')
    for x in range(0,len(like)):
        if like[x].is_displayed():
            like[x].click()
    
    #tried to create a list by class and click on everything within the list and it didn't work.
    like = browser.find_elements_by_class_name('like_picto_unselected')
    like.click()
    
    AttributeError: 'list' object has no attribute 'click'
    

    I know I can't click on a list because it isn't a single object, but I have no idea how I'd go about this otherwise.

    Your help is greatly appreciated.