如何筛选具有相同类的元素?
<html>
<body>
<p class="content">Link1.</p>
</body>
</html>
<html>
<body>
<p class="content">Link2.</p>
</body>
</html>
如何筛选具有相同类的元素?
<html>
<body>
<p class="content">Link1.</p>
</body>
</html>
<html>
<body>
<p class="content">Link2.</p>
</body>
</html>
您可以尝试使用find_elements_by_class_name方法,通过查找所有 class = "content"
的元素来获取列表:
a = driver.find_elements_by_class_name("content")
然后您可以单击要查找的链接。
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
根据HTML:
<html>
<body>
<p class="content">Link1.</p>
</body>
<html>
<html>
<body>
<p class="content">Link2.</p>
</body>
<html>
有两个内容的
元素。
所以为了筛选出拥有相同类名即 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
您可以在以下几个讨论中找到一些相关的内容:
find_element_by_*
和find_elements_by_*
在Selenium 4.3.0中已被移除,请使用find_element
代替。" - Peter Mortensen使用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')
第一个答案已被弃用,其他答案只返回一个结果。以下是正确的答案:
driver.find_elements(By.CLASS_NAME, "content")
)。以下是你可以做到这一点的方法:
标签内的文本。在你的情况下,它应该打印出"Link1."和"Link2."。
selectableEls = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "content")))
for el in selectableEls:
print(el)
a
初始化为空列表呢? - user124384find_element_by_*
和find_elements_by_*
已被移除,请使用find_element
代替。您可以在此处查看所有变更日志。 - Parampreet Raifind_elements(By.CLASS_NAME, 'foo')
来获取元素列表。 - Brian Leishman