Все атрибуты элемента в конкретном контейнере selenium python

Допустим, у меня есть код 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.

Я не могу понять из вашего описания, что вы хотите делать с контейнерами без href?

SiAce 23.12.2020 19:37

ну, скажем так, я хочу напечатать текст «Нет доступных данных»

DBraun 23.12.2020 19:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
767
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать это

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-адрес, если вы запустите селен в локальном файле.

Другие вопросы по теме