Допустим, у меня есть код HTML, который выглядит так, и я использую селекторы CSS для создания списка элементов.
<div class = "item-cell">
<div class = "item-container">
<div class = "item-price">
<a href = "www.xyz.com/xyz" class = "item-img"> </a>
<div class = "item-info">
<span class = "price"> </span>
<div class = "item-cell">
<div class = "item-container">
<div class = "item-price">
<a href = "www.xyz.com/xyz" class = "item-img"> </a>
<div class = "item-info">
<span class = "price"> </span>
elements = driver.find_elements_by_css_selector('div.item-cell div.item-container')
теперь у меня есть список элементов на уровне контейнера элементов. Как мне найти значение href каждого элемента в elements.
Я думал, что я делаю что-то вроде
for element in elements:
element.get_attribute("href")
Я знаю, что могу явно перейти на уровень href с кодом, но я хочу проверить, содержит ли каждый контейнер href, и если да, то мне нужно значение в этом контейнере. Если я перейду конкретно к уровню href, он просто пропустит контейнеры, в которых нет href.
ну, скажем так, я хочу напечатать текст «Нет доступных данных»
Вы можете попробовать это
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome()
driver.get("file://{PATH_TO_YOUR_FILE}")
elements = driver.find_elements_by_css_selector('div.item-cell div.item-container')
for element in elements:
try:
link = element.find_element_by_tag_name('a')
print(link.get_attribute('href'))
except NoSuchElementException:
print('No Data Available!')
driver.close()
Кроме того, я бы посоветовал окружить ваши элементы div </div>
и добавить https://
перед URL-адресами.
<div class = "item-cell">
<div class = "item-container">
<div class = "item-price">
<a href = "https://www.example.com/xyz" class = "item-img"> </a>
</div>
<div class = "item-info">
<span class = "price"> </span>
</div>
</div>
</div>
<div class = "item-cell">
<div class = "item-container">
<div class = "item-price">
<a href = "https://www.example.com/xyz" class = "item-img"> </a>
</div>
<div class = "item-info">
<span class = "price"> </span>
</div>
</div>
</div>
<div class = "item-cell">
<div class = "item-container">
</div>
</div>
Если вы не добавите https://
перед своими URL-адресами, python будет интерпретировать его как локальный URL-адрес, если вы запустите селен в локальном файле.
Я не могу понять из вашего описания, что вы хотите делать с контейнерами без href?