Получите первый элемент в сети с индивидуальным Xpath

Я запускаю небольшой сценарий Python Selenium и хочу получить доступ к атрибутам из первого элемента на этом сайте: https://www.mydealz.de/gruppe/spielzeug. Каждые несколько минут первый элемент отличается и, следовательно, имеет другой идентификатор Xpath. Каковы возможности постоянного доступа к этому первому элементу, который имеет разные идентификаторы / пути Xpath? Первый результат я имел в виду.

Заранее большое спасибо!


person Luke    schedule 31.08.2019    source источник
comment
Что вы имеете в виду под первым элементом ??? вы должны были упомянуть элемент, который вам нужен ?? Где ваш пробный код ???   -  person KunduK    schedule 31.08.2019
comment
пожалуйста, включите ваш текущий сценарий.   -  person QHarr    schedule 31.08.2019
comment
Первый результат, который я имел в виду   -  person Luke    schedule 31.08.2019


Ответы (2)


Я слежу за сайтом последние 15 минут, но для меня страница не изменилась.

Тем не менее, я попытался очистить данные с помощью BS4 (который вы можете заполнить текущим сеансом браузера Selenium), где он всегда должен сначала возвращать первый элемент.

from bs4 import BeautifulSoup
import requests

data = requests.get('https://www.mydealz.de/gruppe/spielzeug')
soup = BeautifulSoup(data.text, "html.parser")
price_info = soup.select(".cept-tp")

for element in price_info:
    for child in element:
        print(child)

Конечно, это просто цена, но вы можете применить ту же логику для других элементов.

person Ivo Lindsen    schedule 31.08.2019

Чтобы напечатать первый title, вы должны вызвать WebDriverWait для желаемого visibility_of_element_located(), и вы можете использовать любой из следующих Стратегии поиска:

  • Использование CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.threadGrid div.threadGrid-title.js-contextual-message-placeholder>strong.thread-title>a"))).get_attribute("title"))
    
  • Использование XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='threadGrid']//div[@class='threadGrid-title js-contextual-message-placeholder']/strong[@class='thread-title']/a"))).text)
    
  • Примечание. Вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Консольный вывод двух выполненных подряд:

  • [Mediamarkt @Ebay.de] diverse Gravitrax Erweiterungen günstig!

  • [Mediamarkt @Ebay.de] diverse Gravitrax Erweiterungen günstig!

Согласно документации:

  • _ 9_ метод Gets the given attribute or property of the element.

  • _ 11_ возвращает The text of the element.

person DebanjanB    schedule 31.08.2019