Парсер для yandex photo

Wanlix

Новичок
Пользователь
Сен 13, 2024
1
0
1
Здравствуйте. Написал вот такой незамысловатый код. На что хватило знаний. Проблема заключается в том, что у меня n-ое кол-во фотографий с товаром. Я хочу с помощью yandex photo находить этот товар с самой низкой ценной на всех площадках. Если в строке "filename" указывать явный путь (вернее название файла .jpg) всё работает как надо за исключением выгрузки фотографии в таблицу excel. А если пустить это через цикл for. то обновляются только filename.(Переменная-массив prices) Цена не обновляется. Я полный новичок в программировании. Прошу сильно не ругаться.
Python:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
 
import openpyxl
from openpyxl.drawing.image import Image
 
# Set the folder path
folder_path = '/home/wanlix/PycharmProjects/pythonProject/photo'
 
# Create a new instance of the Chrome driver
driver = webdriver.Chrome()
 
# Navigate to Yandex.Images
driver.get("https://yandex.ru/images/")
 
try:
    # Create lists to store the data
    prices = []
    links = []
 
    # Iterate over all files in the folder
    for filename in os.listdir(folder_path):
        # Upload the photo to Yandex.Images
        image_input = WebDriverWait(driver, 10).until(
            ec.presence_of_element_located((By.CSS_SELECTOR, "input[type='file']")),
            message="Таймаут ожидания поля ввода файла"
        )
        print("Поле ввода файла найдено")
        time.sleep(0.1)
        image_input.send_keys(os.path.join(folder_path, filename))
        print(f"Файл {filename} отправлен в поле ввода файла")
        time.sleep(0.1)
 
        # Wait for the search results
        search_results = WebDriverWait(driver, 10).until(
            ec.presence_of_all_elements_located((By.ID, "cbir-products-title")),
            message="Таймаут ожидания результатов поиска"
        )
        print("Результаты поиска загружены")
        time.sleep(0.1)
 
        # Extract the price text for each file
        span_element = WebDriverWait(driver, 10).until(
            ec.presence_of_element_located((By.XPATH, "//span[@class='Price-Value']")),
            message="Таймаут ожидания цены"
        )
        price_text = span_element.text
        print(price_text)  # Output: 1 108 ₽
 
        # Store the data
        data = {
            "Photo": filename,
            "Price": price_text
        }
        prices.append(data["Price"])
        links.append(filename)
 
    # Create an Excel file and add a worksheet
    wb = openpyxl.Workbook()
    ws = wb.active
 
    # Set the header row
    ws['A1'] = "Photo"
    ws['B1'] = "Price"
 
    # Iterate over the data and add it to the worksheet
    for i, data in enumerate(zip(links, prices)):
        # Insert the photo
        img_path = os.path.join(folder_path, data[0])
        img = Image(img_path)
        ws.add_image(img, f'A{i+2}')
 
        # Add the price text
        ws[f'B{i+2}'] = data[1]
 
    # Save the Excel file
    wb.save("output.xlsx")
 
except Exception as e:
    print(f"Ошибка произошла: {e}")
 
finally:
    # Закрытие браузера
    driver.quit()
    print("Браузер закрыт")

Помогите с обновлением цены. При моих четных попытках это реализовать открывается два окна chrome и всё. И объясните как правильно работать с созданием таблицы excel. Заранее большое спасибо
 

Форум IT Специалистов