在Python中使用Selenium来单击具有相同类名的所有元素 [英] Using Selenium in Python to click through all elements with the same class name

查看:705
本文介绍了在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.

这篇关于在Python中使用Selenium来单击具有相同类名的所有元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆