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

2025-03-05 09:14:00
admin
原创
38
摘要:问题描述:如何过滤具有相同类别的元素?<html> <body> <p class="content">Link1.</p> </body> </html> <html> <bod...

问题描述:

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

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

解决方案 1:

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

a = driver.find_elements_by_class_name("content")

然后您可以单击您正在寻找的链接。

解决方案 2:

By.CLASS_NAME尚未提及:

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

XPATH

解决方案 3:

根据 HTML:

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

两 (2) 个<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']")))
  • 注意:您必须添加以下导入:

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

参考

您可以在以下位置找到几个相关的讨论:

  • 如何使用 Selenium 和 Python 通过类名识别元素,即使有多个具有相同类名的元素

  • 无法在 Selenium 和 Java 中使用 className 定位元素

  • selenium python 中 find_element_by_class_name 的属性是什么?

  • 如何通过 Selenium 和 Python 使用 classname 属性定位最后一个 Web 元素

解决方案 4:

使用 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')

解决方案 5:

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

解决方案 6:

第一个答案已被弃用,其他答案仅返回一个结果。这是正确答案:

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

解决方案 7:

问题与“元素”复数有关,大多数与元素有关。要等待元素然后迭代每个元素:

selectableEls = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "content")))
for el in selectableEls:
    print(el)

解决方案 8:

在 Python 中,Selenium 提供了一种名为 find_elements_by_class_name 的方法来查找具有相同类名的元素。此方法返回与提供的类名匹配的所有元素的列表。

假设你试图查找所有段落(

) 类为“content”。具体操作如下:

从 selenium 导入 webdriver

初始化驱动程序

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

导航到您的网页

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

按类名查找元素

元素 = 驱动程序.find_elements_by_class_name('内容')

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

此脚本将打印每个

带有“content”类的标签。在您的例子中,它应该打印“Link1。”和“Link2。”。

请记住,Selenium需要特定的驱动程序才能与所选浏览器交互。Firefox 需要 geckodriver,需要先安装该驱动程序才能运行上述脚本。

另外,请记住,即使只有一个匹配项,find_elements_by_class_name 也会返回一个列表。如果您确定只有一个感兴趣的元素,请使用 find_element_by_class_name(请注意“element”中没有“s”)直接获取 WebElement。

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

祝你编码愉快!

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1914  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1432  
  项目管理专业人士(PMP)认证是许多从业者职业发展的重要里程碑,但备考过程中难免会遇到时间冲突的问题。工作安排、家庭责任或其他突发事件可能会打乱原定的复习计划,甚至影响考试当天的状态。面对这种情况,能否高效调整策略、化解冲突,直接关系到考试成败。提前掌握应对技巧并制定灵活的预案,可以帮助考生在压力下保持冷静,最大化利用...
深入浅出PMP   0  
  项目管理证书早已不再是少数专业人士的专属标签,而是逐渐成为职场竞争力的通用货币。无论是希望晋升的管理者,还是渴望转型的从业者,系统化的项目管理知识体系都能为职业发展提供清晰路径。这种认证的价值不仅体现在理论知识的沉淀上,更在于它能将碎片化的实践经验转化为可复用的方法论,从而帮助持证者在复杂工作场景中快速找到最优解。随着...
pmp怎么考   0  
  项目管理专业人士(PMP)认证是全球公认的项目管理领域黄金标准,它不仅能够提升个人职业竞争力,还能为组织带来更高的项目管理成熟度。然而,PMP考试的通过率并不高,许多考生在备考过程中面临巨大挑战。通过分析大量成功案例和失败教训,我们发现提升PMP考试通过率的关键在于系统化的备考策略和高效的执行方法。以下是七个关键因素,...
PMP证书怎么考   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用