在 Python 中使用 Selenium 按类名查找元素

问题描述 投票:0回答:8

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

<html>
  <body>
    <p class="content">Link1.</p>
  </body>
</html>
<html>
  <body>
    <p class="content">Link2.</p>
  </body>
</html>
python selenium selenium-webdriver webdriver classname
8个回答
92
投票

您可以尝试使用

find_elements_by_class_name: 来获取所有元素的列表。
class = "content"

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


51
投票
By.CLASS_NAME

尚未提及: a = driver.find_elements_by_class_name("content")



这是属性列表

,可以在 By: 中用作定位器

from selenium.webdriver.common.by import By driver.find_element(By.CLASS_NAME, "content")

  
CLASS_NAME
  
CSS_SELECTOR
  
ID
  
LINK_TEXT
  
NAME
  
PARTIAL_LINK_TEXT
  
TAG_NAME

    


31
投票

XPATH

两个 (2) 
<html> <body> <p class="content">Link1.</p> </body> <html> <html> <body> <p class="content">Link2.</p> </body> <html>

元素具有相同的类

<p>
因此,要过滤具有相同类的元素,即

content

并创建

列表
,您可以使用以下任一定位器策略

    使用
  • content

    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']")))

    
    
参考文献

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

    如何使用 Selenium 和 Python 通过类名识别元素,即使有多个具有相同类名的元素
  • 无法在Selenium和Java中使用className定位元素
  • selenium python 中 find_element_by_class_name 的属性是什么?
  • 如何通过Selenium和Python使用classname属性定位最后一个Web元素

14
投票
http://www.w3schools.com/cssref/sel_nth-child.asp

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

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

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



12
投票

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


    


3
投票

find_element_by_class_name('class_name')



0
投票

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



0
投票

假设您正在尝试查找具有“内容”类的所有段落 (

)。具体方法如下:

从硒导入网络驱动程序

初始化驱动程序

driver = webdriver.Firefox() # 替换为您选择的浏览器驱动程序

导航至您的网页

driver.get('https://www.softwaretestingsapiens.com/finding-elements-by-class-name-with-selenium-in-python/')

通过类名查找元素

elements = driver.find_elements_by_class_name('content')

对于元素中的 el: 打印(el.text)

此脚本将打印每个

标签内带有“content”类的文本。在您的情况下,它应该打印“Link1”。和“链接2”。

请记住,

Selenium

需要特定的驱动程序才能与所选浏览器交互。 Firefox 需要 geckodriver,需要先安装 geckodriver,然后才能运行上述脚本。 另外,请记住 find_elements_by_class_name 会返回一个列表,即使只有一个匹配项。如果您确定只有一个感兴趣的元素,请使用 find_element_by_class_name (注意“element”中缺少“s”)直接获取 WebElement。

最后,建议在脚本中添加一些错误处理来管理找不到元素的情况。这将使您的代码更加健壮并且更易于调试。

编码快乐!

© www.soinside.com 2019 - 2024. All rights reserved.