В Selenium вы можете использовать XPath
или CSS Selector
для создания более сложных правил.
Кажется, вы можете использовать XPath //div/*
или CSS селектор div > *
, чтобы получить все дочерние элементы в div
Чтобы получить все (не только дочерние элементы) xpath //div//*
и CSS Selector div *
С XPath вы также можете получить дочерние элементы с некоторыми ограничениями - ie.
//div/*[b]
- дети с <b>
внутри.
//div/*[text()="Hello"]
- дети с текстом Hello
.
Или даже вложенными //div/*[b[text()="Title"]]
- дети с <b>
которые имеют текст Title
.
Пример кода
from selenium import webdriver
driver = webdriver.Firefox()
html = """
<html>
<head></head>
<body>
<div>
<h1><b>Title</b></h1>
<span>Hello</span>
<span>World<b> !!!</b></span>
<p>Text</p>
</div>
</body>
</html>
"""
driver.get("data:text/html;charset=utf-8,{html}".format(html=html))
print('--- children ---')
for item in driver.find_elements_by_xpath('//div/*'):
print(item.tag_name)
print('--- all ---')
for item in driver.find_elements_by_xpath('//div//*'):
print(item.tag_name)
print('--- children ---')
for item in driver.find_elements_by_css_selector('div > *'):
print(item.tag_name)
print('--- all ---')
for item in driver.find_elements_by_css_selector('div *'):
print(item.tag_name)
print('--- children with <b> ---')
for item in driver.find_elements_by_xpath('//div/*[b]'):
print(item.tag_name)
print('--- children with text "Hello" ---')
for item in driver.find_elements_by_xpath('//div/*[text()="Hello"]'):
print(item.tag_name)
print('--- children with <b> which have text "Hello" ---')
for item in driver.find_elements_by_xpath('//div/*[b[text()="Title"]]'):
print(item.tag_name)
Результат:
--- children ---
h1
span
span
p
--- all ---
h1
b
span
span
b
p
--- children ---
h1
span
span
p
--- all ---
h1
b
span
span
b
p
--- children with <b>---
h1
span
--- children with <b>---
span
--- children with <b> which have text "Hello" ---
h1