当前位置: 首页 > 知识库问答 >
问题:

如何使用硒和Python查找具有多个类名的元素

勾学博
2023-03-14

我尝试单击以下元素,类名等于<code>“clean right”:

<li class="clean right"></li>

如何使用<code>驱动程序定位它。find_element_by_class_name()

共有2个答案

翁宏茂
2023-03-14

之前的回答部分不正确。请在以下位置查看源代码:

https://github.com/SeleniumHQ/selenium/blob/9160de55af9cc230f758f4ce6a2af8d1570f0614/py/selenium/webdriver/remote/webdriver.py

您可以将class_name用于多个类,只需将空格替换为“。”

将类与空格一起使用的示例:

from selenium import webdriver
from time import sleep

options = webdriver.ChromeOptions()
#options.headless = True
options.add_argument("--window-size=1920,1080")
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument(
    "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36")
browser = webdriver.Chrome(options=options)
browser.get("https://www.instagram.com")
sleep(5)
#browser.refresh()
elem=browser.find_element_by_class_name('RP4i1.UVauz')
print(elem.get_attribute("outerHTML"))
browser.get_screenshot_as_file(f"screenshot.png")

输出:

<img class="RP4i1  UVauz" src="/static/images/homepage/screenshot1.jpg/d6bf0c928b5a.jpg" alt="">

如果您从by_class_name检查例外:

您可以看到它在引擎盖下使用css_class定位器(您可以看到它在前面自动添加)。

另一个工作示例:

from selenium import webdriver

import time

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://stackoverflow.com/questions/65579491/find-element-by-class-name-in-selenium-giving-error/65579606?noredirect=1#comment115946541_65579606")
time.sleep(5)
elem = driver.find_element_by_class_name('overflow-x-auto.ml-auto.-secondary.grid.ai-center.list-reset.h100')

print(elem.get_attribute("outerHTML"))
杨腾
2023-03-14

您不能通过<code>find_element_by_class_name()

invalid selector: Compound class names not permitted

有多种方法可以解决此用例,您可以使用以下定位器策略之一:

>

  • 如果元素仅通过类名清洁唯一标识,您可以使用:

    driver.find_element_by_class_name("clean")
    

    如果元素仅通过类名权限唯一标识,则可以使用:

    driver.find_element_by_class_name("right")
    

    如果<code>类名称、<code>clean和<code>right

    driver.find_element_by_css_selector("li.clean.right")
    

    或者,您也可以使用xpath,如下所示:

    driver.find_element_by_xpath("//li[@class='clean right']")
    

    无效选择器:不允许复合类名使用Selenium时出错

    通过多个类名查找div元素?

  •  类似资料:
    • 问题内容: 我正在将selenium与python配合使用,现在我想按其ID名称的一部分来定位元素,该怎么办? 例如,现在我已经找到了一个ID为 coption5的商品 : 无论如何,我只能使用 coption 来定位此元素吗? 问题答案: 要查找您所在的元素: 要仅通过使用 coption 来定位此元素,可以使用以下 定位策略之一: 使用和: 使用和: 使用和(开头为通配符): 使用和(包含通配

    • 检查的元素。尝试用各种方法在代码中查找元素。但一切都不起作用。请建议在应用程序中编辑PIN号码的xpath应该是什么 null Driver.FindElementByXPath(“//Android.Widget.FrameLayout//Android.View.View[@index='3']//Android.Widget.EditText”)

    • 问题内容: 我想识别该网络元素。它仅定义了这两个类。我不能执行以下操作,因为不使用空格分隔的值。什么是替代品? 问题答案: 我认为巴拉克·马诺斯的答案不能完全解释这一点。 想象一下,我们只有以下几个元素: XPath如何匹配 只匹配1个(完全匹配),巴拉克的答案 比赛1,比赛2和比赛3(比赛类别包含,课程顺序很重要) 匹配1、2、3和4(只要元素具有class 和) 同样,在这种情况下,Css S

    • 下面的代码做了我需要它做的事情,除非它遇到一个缺少class_name的产品,比如说product-price。我需要帮助的是如何跳过那个特定的项目,转移到下一个项目。目前我得到以下错误: Traceback(最近调用最后):文件“/users/user/pycharmprojects/test/homedepotdishwashers.py”,第31行,打印(model.text,price.t

    • 问题内容: 我无法使用解析具有属性的元素。代码看起来像这样 脚本完成后的同一行出现错误。 如何摆脱这个错误? 问题答案: 你可以使用BS3优化搜索以仅找到具有给定类的那些div:

    • 问题内容: 我有一个脱机菜单,可以在网站上完美运行。用户既可以使用导航键也可以用手指滑动它来打开和关闭它。 现在,我有一个非常不错的navicon图标,当单击(并打开菜单)时,它会从菜单图标过渡到X图标,反之,当再次单击并关闭菜单时,它又会转变为X图标。Buuut,如果用户将菜单滑动到打开或关闭而不是使用导航按钮的状态,则不会触发过渡,这可能会导致UX混乱(即,菜单被关闭,并且导航按钮显示X而不是