在Python中使用Selenium来单击具有相同类名的所有元素

在Python中使用Selenium来单击具有相同类名的所有元素

问题描述:

我试图单击网页上的所有喜欢"按钮.我知道如何单击它们之一,但我希望能够全部单击它们.它们具有相同的类名,但具有不同的ID.

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.

非常感谢您的帮助.

这很不幸,您只有一半,由于ID是单个元素唯一的,因此无法通过id找到多个元素.

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.

因此将与id一起使用的迭代方法和带有类的find by元素结合起来以获取:

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.