Пишу код для парсинга на wildberries. Когда загружаю в код ссылку на каталог(к примеру https://www.wildberries.ru/catalog/muzhchinam/odezhda/kostyumy ), после запуска кода получаю значение цены на первый товар из каталога. Когда же я хочу получить цену на какой-либо из конкретных товаров (к примеру https://www.wildberries.ru/catalog/202925589/detail.aspx ), то после запуска получаю сообщение, что цена не найдена. Что нужно исправить в коде, что бы я мог получить цену только одного конкретного товара по ссылке? Поиск элемента с ценой вроде правильный. Быть может нужно изменить подход?
import undetected_chromedriver as uc from selenium.webdriver.common.by import By from fake_useragent import UserAgent import time import random import re def get_price_wildberries(url): options = uc.ChromeOptions() ua = UserAgent() user_agent = ua.random options.add_argument(f'user-agent={user_agent}') driver = uc.Chrome(options=options) try: driver.get(url) driver.implicitly_wait(10) # Wait for dynamic content # Поиск элемента с ценой. Подход должен быть гибким price_element = driver.find_element(By.CSS_SELECTOR, ".price-block__final-price, .price__price, .price, span.price") print(price_element.text) price_text = price_element.text.strip() print(price_text)
# Извлекаем только цифры и точки для преобразования в float price_value = re.sub(r"[^\d\.]", "", price_text)
# Проверяем наличие точки if "." not in price_value: try: return int(price_value) except ValueError: return None try: return float(price_value) except ValueError: return None
except Exception as e: print(f"Error getting price: {e}") return None finally: print('Сработал блок 2')
driver.quit() if __name__ == '__main__': product_url = " https://www.wildberries.ru/catalog/202925589/detail.aspx " price = get_price_wildberries(product_url) if price: print(f"Product price: {price}") else: print(f"Price not found for {product_url}")
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from fake_useragent import UserAgent
import time
import random
import re
def get_price_wildberries(url):
options = uc.ChromeOptions()
ua = UserAgent()
user_agent = ua.random
options.add_argument(f'user-agent={user_agent}')
driver = uc.Chrome(options=options)
try:
driver.get(url)
driver.implicitly_wait(10) # Wait for dynamic content
# Поиск элемента с ценой. Подход должен быть гибким
price_element = driver.find_element(By.CSS_SELECTOR, ".price-block__final-price, .price__price, .price, span.price")
print(price_element.text)
price_text = price_element.text.strip()
print(price_text)
# Извлекаем только цифры и точки для преобразования в float
price_value = re.sub(r"[^\d\.]", "", price_text)
# Проверяем наличие точки
if "." not in price_value:
try:
return int(price_value)
except ValueError:
return None
try:
return float(price_value)
except ValueError:
return None
except Exception as e:
print(f"Error getting price: {e}")
return None
finally:
print('Сработал блок 2')
driver.quit()
if __name__ == '__main__':
product_url = " https://www.wildberries.ru/catalog/202925589/detail.aspx "
price = get_price_wildberries(product_url)
if price:
print(f"Product price: {price}")
else:
print(f"Price not found for {product_url}")