如何在 selenium (python) 中接收子节点的内部 HTML?
How to recieve inner HTML of a child node in selenium (python)?
我正在尝试遍历多个节点并从父节点接收各种子节点。假设我有类似以下结构的东西:
<div class="wrapper">
<div class="item">
<div class="item-footer">
<div class="item-type">Some data in here</div>
</div>
</div>
<!-- More items listed here -->
</div>
我可以使用以下方法接收包装器容器的所有子节点。
wrapper = driver.find_element(By.XPATH, '/html/body/div')
items = wrapper.find_elements(By.XPATH, './/*')
无论如何,我现在无法弄清楚如何接收包含有关项目类型信息的容器的内部 HTML。我试过了,但是没用。
for item in items:
item_type = item.item.find_element(By.XPATH, './/div/div').get_attribute('innerHTML')
print(item_type)
这会导致以下错误:
NoSuchElementException: Message: Unable to locate element:
有人知道我该怎么做吗?
从 selenium 获取页面源后,您可以使用 BeautifulSoup
轻松抓取 HTML 数据。
from bs4 import BeautifulSoup
# selenium code part
# ....
# ....
# driver.page_source is the HTML result from selenium
html_doc = BeautifulSoup(driver.page_source, 'html.parser')
items = html_doc.find_all('div', attrs={'class':'item'})
for item in items:
text = item.find('div', attrs={'class':'item-type'}).text
print(text)
输出:
Some data in here
如果您要获取的所有元素的内容都是 div
,属性值 class
item-type
位于 div
内,属性为 class
值 item-footer
您可以简单地执行以下操作:
elements = driver.find_element(By.XPATH, '//div[@class="item-footer"]//div[@class="item-type"]')
for element in elements:
data = element.get_attribute('innerHTML')
print(data)
你只需要找到相对的 xpath
来识别每个元素然后迭代它。
items = driver.find_elements(By.XPATH, "//div[@class='wrapper']//div[@class='item']//div[@class='item-type']")
for item in items:
print(item.text)
print(item.get_attribute('innerHTML'))
或者使用css
选择器
items = driver.find_elements(By.CSS_SELECTOR, ".wrapper >.item .item-type")
for item in items:
print(item.text)
print(item.get_attribute('innerHTML'))
我正在尝试遍历多个节点并从父节点接收各种子节点。假设我有类似以下结构的东西:
<div class="wrapper">
<div class="item">
<div class="item-footer">
<div class="item-type">Some data in here</div>
</div>
</div>
<!-- More items listed here -->
</div>
我可以使用以下方法接收包装器容器的所有子节点。
wrapper = driver.find_element(By.XPATH, '/html/body/div')
items = wrapper.find_elements(By.XPATH, './/*')
无论如何,我现在无法弄清楚如何接收包含有关项目类型信息的容器的内部 HTML。我试过了,但是没用。
for item in items:
item_type = item.item.find_element(By.XPATH, './/div/div').get_attribute('innerHTML')
print(item_type)
这会导致以下错误:
NoSuchElementException: Message: Unable to locate element:
有人知道我该怎么做吗?
从 selenium 获取页面源后,您可以使用 BeautifulSoup
轻松抓取 HTML 数据。
from bs4 import BeautifulSoup
# selenium code part
# ....
# ....
# driver.page_source is the HTML result from selenium
html_doc = BeautifulSoup(driver.page_source, 'html.parser')
items = html_doc.find_all('div', attrs={'class':'item'})
for item in items:
text = item.find('div', attrs={'class':'item-type'}).text
print(text)
输出:
Some data in here
如果您要获取的所有元素的内容都是 div
,属性值 class
item-type
位于 div
内,属性为 class
值 item-footer
您可以简单地执行以下操作:
elements = driver.find_element(By.XPATH, '//div[@class="item-footer"]//div[@class="item-type"]')
for element in elements:
data = element.get_attribute('innerHTML')
print(data)
你只需要找到相对的 xpath
来识别每个元素然后迭代它。
items = driver.find_elements(By.XPATH, "//div[@class='wrapper']//div[@class='item']//div[@class='item-type']")
for item in items:
print(item.text)
print(item.get_attribute('innerHTML'))
或者使用css
选择器
items = driver.find_elements(By.CSS_SELECTOR, ".wrapper >.item .item-type")
for item in items:
print(item.text)
print(item.get_attribute('innerHTML'))