Selenium在python中按类名查找元素

Sre*_*ree 32 selenium

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

<html>
 <body>
  <p class="content">Link1.</p>
</body>
<html>
<html>
 <body>
  <p class="content">Link2.</p>
</body>
<html>
Run Code Online (Sandbox Code Playgroud)

Zyg*_*ygD 53

By.CLASS_NAME尚未提及:

from selenium.webdriver.common.by import By

driver.find_element(By.CLASS_NAME, "content")
Run Code Online (Sandbox Code Playgroud)

这是可以在 By 中用作定位器的属性列表:

CLASS_NAME
CSS_SELECTOR
ID
LINK_TEXT
NAME
PARTIAL_LINK_TEXT
TAG_NAME
XPATH


Lit*_*nda 41

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

a=[];
a = driver.find_elements_by_class_name("content");
Run Code Online (Sandbox Code Playgroud)

然后,您可以单击您要查找的链接.

  • `find_element_by_*` 和 `find_elements_by_*` 在 Selenium 4.3.0 中被删除。请改用“find_element”。查看所有更改日志[此处](https://github.com/SeleniumHQ/selenium/blob/a4995e2c096239b42c373f26498a6c9bb4f2b3e7/py/CHANGES)。 (8认同)
  • 如果立即重新分配a,为什么还要将其初始化为空列表呢? (6认同)
  • @keerthankumar 这个返回所有元素的列表。要获得第一个,请使用“find_element_by_class_name” (3认同)
  • 它返回类的所有元素还是找到的第一个元素? (2认同)
  • @PeterMortensen你仍然可以使用`find_elements(By.CLASS_NAME, 'foo')`来获取元素列表 (2认同)

Deb*_*anB 18

根据 HTML:

<html>
    <body>
    <p class="content">Link1.</p>
    </body>
<html>
<html>
    <body>
    <p class="content">Link2.</p>
    </body>
<html>
Run Code Online (Sandbox Code Playgroud)

两(2)个<p>元素具有相同的 class content

因此,要过滤具有相同类的元素content并创建一个列表,您可以使用以下任一定位器策略


理想情况下,在元件上点击你需要引起WebDriverWaitvisibility_of_all_elements_located(),你可以使用以下的定位策略


参考

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


Sta*_*n E 5

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

driver.find_element(By.CSS_SELECTOR, 'p.content:nth-child(1)')
Run Code Online (Sandbox Code Playgroud)

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

driver.find_element(By.CSS_SELECTOR, 'p.content:first-child')
Run Code Online (Sandbox Code Playgroud)