Что делать, если при парсинге 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()
  • Вопрос задан
  • 461 просмотр
Пригласить эксперта
Ответы на вопрос 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()
Ответ написан
Ваш ответ на вопрос

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

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