如何过滤具有相同类的元素?
<html>
<body>
<p class="content">Link1.</p>
</body>
</html>
<html>
<body>
<p class="content">Link2.</p>
</body>
</html>
尚未提及:
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
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']")))
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)')
find_element_by_class_name('class_name')
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。
最后,建议在脚本中添加一些错误处理来管理找不到元素的情况。这将使您的代码更加健壮并且更易于调试。
编码快乐!