Что делать, если при парсинге selenium находит элемент, но выдает пустые строки?

Занимаюсь парсингом сайта https://www.svyaznoy.ru/catalog/accessories/8936/6...
при попытке спарсить наличие выдает список пустых строк, time.sleep() пробовал Xpath правильный, что делать не знаю
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
from selenium.webdriver.chrome.options import Options
import time

class Parser():
    def __init__(self,url):
        options = webdriver.ChromeOptions()
        options.add_experimental_option("excludeSwitches", ["enable-automation"])
        options.add_experimental_option('useAutomationExtension', False)
        options.add_argument("--disable-blink-features=AutomationControlled")
        self.driver = webdriver.Chrome(options=options)
        self.url = url
    def parse(self):
        self.list_of_towns = ['moskva','sankt-peterburg','arhangelsk','vladivostok','volgograd','voronezh','ekaterinburg','izhevsk','irkutsk','kazan','kemerovo','krasnodar','krasnoyarsk','murmansk','naberezhnye-chelny',
                              'nizhniy-novgorod','novosibirsk','omsk','perm','rostov-na-donu','saratov','samara','sochi','surgut','tver','tolyatti','tula','tyumen','ulyanovsk','ufa','habarovsk','chelyabinsk','yaroslavl']
        self.cityes = []
        try:
            self.driver.get(self.url+'/availability')

            #self.button = self.driver.find_element(By.XPATH,'//a[@class="b-product-tabs-link _nowrap"]').click()


            self.driver.implicitly_wait(8)
            self.scroll = self.driver.find_element(By.XPATH, '//span[@class="shops-other-remains"]').click()
            html = self.driver.page_source
           




            self.location = self.driver.find_element(By.XPATH,'//div[@class="b-shops-map__address-text"]').text
            self.loc = self.location.split(',')
            self.loc = self.loc[0]
            self.location = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__address-text"]')
            time.sleep(2)
            self.nalichie = self.driver.find_elements(By.XPATH,'//span[@class="b-tooltip-new s-tooltip _up _hover-mode"]')
            print([x.text for x in self.location])
            print([y.text for y in self.nalichie])






        finally:
            pass

p = Parser('https://www.svyaznoy.ru/catalog/accessories/8936/6270567/availability/moskva#mainContent')
p.parse()
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
Bubunduc
@Bubunduc Автор вопроса
Поле .text возвращает только видимый текст. Здесь же он появляется после наведение курсора. Здесь текст нужно достать через метод get_attribute('textContent')
self.driver.get(self.url + f'/availability')
self.shops = self.driver.find_elements(By.XPATH, '//span[@class="b-tooltip-new__text s-tooltip-text"]')
print([x.get_attribute('textContent') for x in self.shops])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Поле .text возвращает только видимый текст. Здесь же он появляется после наведение курсора. Здесь текст нужно достать через метод get_attribute('textContent')
И еще, мне кажется, что лучше парсить каждый блок отдельно. Тогда все будет на месте и никакой путанницы.
Вообще, все адреса лежат в JS скрипте

self.shops = self.driver.execute_script('return shopsObj')
for shop in self.shops:
    print(shop['address'], shop['availability_hint'])


old
Сначала найти все строки, которые содержат информацию о магазине:
self.shops = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__shop _other"]')


В цикле к каждому обратиться и достать нужную инфу:
self.shops = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__shop _other"]')

for shop in self.shops:
    print(shop.find_element_by_class_name('b-shops-map__address-text').text)
    print(shop.find_element_by_class_name('b-shops-map__availability-col-wrapper').find_element_by_class_name('b-tooltip-new__text.s-tooltip-text').get_attribute('textContent').strip())
    print()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы