Добавить в корзинуПозвонить
Найти в Дзене

Работа над ии

1. Окружение и Базовые ошибки 2. Авторизация (Login) 3. Сетевой уровень (IP и Прокси) 4. Ошибка 400 (Bad Request) при покупке 5. Ошибка 502 (Bad Gateway / Listing Removed) Это была самая сложная часть. Даже при верном Payload Steam отбивал запрос. 6. Парсинг данных

1. Окружение и Базовые ошибки

  • Проблема: Использование Python 3.14 (Alpha) приводило к ошибкам в библиотеке steampy (TypeError: unhashable type: 'dict' и AttributeError: 'list' object has no attribute 'get').
  • Решение: Откат на стабильный Python 3.12.7. Все библиотеки (steampy, curl_cffi, telethon) работают корректно.

2. Авторизация (Login)

  • Проблема: Стандартный метод client.login() в steampy выдавал ошибку из-за попытки засунуть словарь в set.
  • Решение: Написан патч для LoginExecutor. Теперь бот логинится напрямую, вручную подставляя steam_guard и принудительно очищая куки перед входом.
  • Ошибка 403 при логине: Steam изменил эндпоинт finalizelogin.
  • Решение: Применен патч к методу _finalize_login, который корректно передает nonce и sessionid на новый URL.

3. Сетевой уровень (IP и Прокси)

  • Проблема: Бот работал в облаке (Google Cloud), чьи IP-адреса находятся в жестком черном списке Steam для торговых операций.
  • Решение: Перенос запуска на домашний IP. Для обхода системного VPN (нужного для Telegram) внедрен патч trust_env = False, чтобы Steam-сессия шла напрямую.

4. Ошибка 400 (Bad Request) при покупке

  • Проблема: Использование устаревшего метода buy_item. Неверный расчет копеек (тиынов) и отсутствие обязательных полей в запросе.
  • Решение: Переход на прямой POST-запрос к /market/buylisting/.Валюта установлена в 37 (KZT).
    Цены (subtotal, fee, total) передаются как
    целые числа (int), рассчитанные из g_rgListingInfo.
    Добавлены «нулевые» обязательные поля: billing_state: "", save_my_address: 0, tradefee_tax: 0, confirmation: 0.

5. Ошибка 502 (Bad Gateway / Listing Removed)

Это была самая сложная часть. Даже при верном Payload Steam отбивал запрос.

  • Причина 1 (IP Binding): Сессия создавалась на одном IP (облако), а покупка шла с другого (дом).Решение: Полная очистка всех .session файлов и кук перед логином. Создание «чистой» сессии с текущего IP.
  • Причина 2 (Fingerprinting): Steam понимал, что запрос шлет скрипт, а не браузер.Решение: Внедрение curl_cffi с impersonate='chrome120'.
    Решение: Установка строгого порядка заголовков (Host, Connection... Cookie) и добавление современных заголовков безопасности Sec-Fetch-Site, Sec-Fetch-Mode, Sec-Fetch-Dest.
  • Причина 3 (Отсутствие прогрева): Бот слал POST-запрос «в лоб».Решение: Добавлен Warmup GET. Теперь бот сначала «посещает» главную страницу маркета и страницу предмета, собирает куки (включая webTradeEligibility), и только потом покупает.

6. Парсинг данных

  • Проблема: Эндпоинт /render/ часто выдает кэшированные (уже проданные) лоты.
  • Решение: Бот скачивает HTML страницы предмета и вытягивает данные из JS-объекта g_rgListingInfo. Это гарантирует 100% свежесть listingid.