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