【问题标题】:Selenium Finding elements by class name in pythonSelenium 在python中按类名查找元素
【发布时间】:2015-07-12 04:43:24
【问题描述】:

如何过滤具有相同类的元素?

<html>
  <body>
    <p class="content">Link1.</p>
  </body>
</html>
<html>
  <body>
    <p class="content">Link2.</p>
  </body>
</html>

【问题讨论】:

  • 您已经尝试过什么(代码)了吗?由于您是新手,请阅读我们的Tour page,尤其是How do I ask a good question?
  • 另外你的html代码格式不好。你没有关闭 标签。
  • 你要对选中的元素做什么?您希望使用什么标准?你已经尝试过什么?

标签: python selenium selenium-webdriver webdriver classname


【解决方案1】:

您可以尝试使用find_elements_by_class_name 获取带有class = "content" 的所有元素的列表:

a = driver.find_elements_by_class_name("content")

然后您可以点击您要查找的链接。

【讨论】:

  • 返回类的所有元素还是返回第一个找到的元素?
  • 如果立即重新分配a,为什么还要将其初始化为空列表?
  • @keerthankumar 这个返回列表中的所有元素。要获得第一个使用find_element_by_class_name
  • python代码行末尾不需要分号。
  • 现在选择类名后如何点击? .click() 属性不起作用!
【解决方案2】:

根据 HTML:

<html>
    <body>
    <p class="content">Link1.</p>
    </body>
<html>
<html>
    <body>
    <p class="content">Link2.</p>
    </body>
<html>

两(2) 个&lt;p&gt; 元素具有相同的类content

所以要过滤具有相同类的元素,即content 并创建一个列表,您可以使用以下任一Locator Strategies

  • 使用class_name

    elements = driver.find_elements_by_class_name("content")
    
  • 使用css_selector:

     elements = driver.find_elements_by_css_selector(".content")
    
  • 使用xpath:

    elements = driver.find_elements_by_xpath("//*[@class='content']")
    

理想情况下,点击您需要为WebDriverWait 诱导visibility_of_all_elements_located() 的元素,您可以使用以下任一定位器策略

  • 使用CLASS_NAME

    elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "content")))
    
  • 使用CSS_SELECTOR

    elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".content")))
    
  • 使用XPATH

    elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@class='content']")))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

参考文献

您可以在以下位置找到一些相关讨论:

【讨论】:

  • 类名和 css 选择器都不起作用,不知道为什么,但是 xpath 起作用了,非常感谢
【解决方案3】:

By.CLASS_NAME 尚未提及:

from selenium.webdriver.common.by import By

driver.find_element(By.CLASS_NAME, "content")

This is the list of attributes 可以在 By: 中用作定位器

CLASS_NAME
CSS_SELECTOR
ID
LINK_TEXT
NAME
PARTIAL_LINK_TEXT
TAG_NAME
XPATH

【讨论】:

    【解决方案4】:

    最简单的方法是使用find_element_by_class_name('class_name')

    【讨论】:

      【解决方案5】:

      使用nth-child,例如:http://www.w3schools.com/cssref/sel_nth-child.asp

      driver.find_element(By.CSS_SELECTOR, 'p.content:nth-child(1)')
      

      http://www.w3schools.com/cssref/sel_firstchild.asp

      driver.find_element(By.CSS_SELECTOR, 'p.content:first-child')
      

      【讨论】:

        猜你喜欢
        • 2021-03-05
        • 2023-01-03
        • 2021-08-12
        • 2016-06-08
        • 2021-09-20
        • 1970-01-01
        • 2019-11-18
        • 2015-01-18
        • 2020-05-19
        相关资源
        最近更新 更多