Вернуться к блогу
Sep. 26th 2025

Как создать снайпинг-бот для слепых коробок Pop Mart: Полное руководство по автоматизации для коллекционеров

Узнайте, как создать бота для снайпинга слепых коробок Pop Mart с помощью Nstproxy. Этот гид охватывает поэтапную автоматизацию с использованием Python + Playwright, интеграцию прокси и стратегии, чтобы опередить скальперов в поисках редких коллекционных предметов.

Выпуск очень востребованных слепых коробок часто завершается мгновенно, оставляя бесчисленные энтузиасты в поражении в их борьбе с автоматизированными скриптами. Создавая специализированный инструмент автоматизации, обычные коллекционеры могут достичь откликов на уровне миллисекунд, мониторинга запасов в реальном времени и конкурировать на равных с спекулянтами, использующими профессиональные инструменты. Готовы ли вы заполучить эти желанные редкие коллекционные вещи?

Почему стоит автоматизировать покупки слепых коробок?

Среди яркого ассортимента дизайнерских игрушек от Pop Mart серия слепых коробок выделяется своим уникальным шармом. Созданная художником Молли Йиллом, эта серия хитро объединяет сложные эмоциональные выражения, глубоко резонируя с коллекционерами, которые ценят психическое здоровье и эмоциональную связь.

Эта серия успешно представила несколько популярных тем, таких как "Снова плачу", "Фабрика слез" и "Плачу за любовь", а также сотрудничала с известными брендами, такими как Девочки-мускулы. Каждая тема обычно включает от 6 до 12 различных дизайнов, тогда как высокоценимые секретные издания появляются примерно раз в 72–288 слепых коробках, с конкретной редкостью в зависимости от серии.

Для коллекционеров слепых коробок ручная покупка является крайне сложной задачей, в первую очередь из-за глубокой эмоциональной привязанности фанатов к этим произведениям искусства. Эти фигурки — не просто простые потребительские товары; это значимые компоненты личных коллекций. Эта сильная эмоциональная связь приводит к тому, что рыночный спрос значительно превышает фактическое предложение, что делает автоматизированную покупку жизненно важной стратегией для успешного приобретения.

Почему ручные покупки слепых коробок терпят неудачу

Глубокое понимание технических барьеров, с которыми сталкивается ручная покупка при выпуске слепых коробок, выявляет незаменимую природу инструментов автоматизации.

Официальный сайт Pop Mart использует несколько слоев сложных анти-автоматизационных механизмов, включая распознавание CAPTCHA, ограничения частоты доступа по IP и региональные ограничения. В периоды пикового спроса, когда спрос на продукт возрастает, серверы часто становятся перегруженными из-за огромного трафика, что приводит к очень медленной загрузке страниц или даже к полным сбоям, что делает ручные операции почти невозможными.

Модель продаж слепых коробок еще больше усугубляет конкуренцию, поскольку потребители не могут определить конкретный дизайн до покупки. Многие коллекционеры, стремясь к определенному желаемому дизайну или редкому секретному изданию, выбирают массовую покупку, что, безусловно, умножает рыночный спрос, заставляя товары распродаваться за считанные минуты или даже секунды.

В отличие от этого, профессиональные рыночные спекулянты (обычно известные как "спекулянты") используют высокоавтоматизированные торговые системы, способные обрабатывать данные на скорости миллисекунд. Обычные потребители, полагаясь только на традиционные браузеры для ручных операций, просто не могут конкурировать со скоростью автоматизированных систем. Поэтому разработка специализированного бота для автоматизированной покупки стала единственным эффективным способом гарантировать успешное приобретение ограниченных слепых коробок.

Основные компоненты для создания бота для снайпинга слепых коробок

Чтобы успешно приобрести желаемые фигурки слепых коробок во время ограниченных выпусков Pop Mart, вам необходимо тщательно интегрировать ряд синергетических технических элементов.

Язык программирования Python

Python является основным столпом для создания системы автоматизированных покупок, предоставляя программную основу, необходимую для выполнения автоматизационных скриптов. Благодаря своей отличной гибкости Python эффективно справляется со сложной архитектурной конструкцией сайта Pop Mart и быстро адаптируется к динамическим изменениям в статусе запасов.

Фреймворк автоматизации браузера Playwright

Playwright станет вашим мощным инструментом для автоматизации браузера, позволяя вашим скриптам работать на сайте Pop Mart в высокосимулированном режиме. Будь то обработка сложных страниц на JavaScript, имитация нажатий кнопок или выполнение других навигационных действий, Playwright может выполнять операции точно так же, как реальный пользователь, ведя процесс покупки до завершения без ручного вмешательства.

Драйверы браузеров Chrome или Firefox

Эти драйверы предоставляют рабочую среду для Playwright. Обеспечение совместимости используемой версии браузера с соответствующим драйвером имеет решающее значение для беспрепятственного выполнения автоматизированных процессов в критические моменты покупок.

Служба прокси Nstproxy

Nstproxy сервис резидентного прокси обеспечивает важную защиту для ваших автоматизированных операций, динамически изменяя IP-адреса с реальных домашних устройств. Этот механизм эффективно предотвращает обнаружение системами противодействия мошенничеству на веб-сайтах, обеспечивая неоспоримость ваших прав на доступ в периоды высокой загруженности. Он эффективно обходит ограничения по IP на сайтах и различные стратегии противодействия парсингу, что делает ваше поведение при покупке естественным и незаметным.

Учетная запись пользователя Pop Mart

Некоторые покупки продуктов требуют привязки к учетной записи Pop Mart. Наличие и управление несколькими активными учетными записями значительно увеличит ваши шансы на успешное приобретение лимитированных предметов в условиях жесткой конкуренции, так как каждая учетная запись представляет собой независимый канал для покупок.

Анализ процесса оформления заказа в Pop Mart

Для успешной разработки эффективного и надежного бота для охоты на слепые коробки необходимо глубокое понимание базовой архитектуры Pop Mart и его процесса оформления заказа.

Страницы продуктов обычно следуют единой структуре URL, содержащей коды идентификации серий и конкретные коды продуктов. Например, продукты в слепых коробках часто появляются по маршрутам вроде "/us/products/[номер_продукта]/CRYBABY…", что обеспечивает удобную базу для автоматического мониторинга и анализа данных.

Изменения в состоянии наличия товаров в реальном времени будут вызывать различную обратную связь в отображении страницы и взаимодействии, и ваш бот должен уметь точно определять эти изменения. Например, когда товар отсутствует на складе, кнопка "Добавить в корзину" становится недоступной; в то время как товары в наличии будут отображать доступные опции покупки и обновлять информацию о наличии в реальном времени.

Механизмы защиты от ботов в Pop Mart присутствуют на всех этапах процесса покупки. Поэтому ваша автоматизация должна уметь обрабатывать CAPTCHA, проверять эффективность пользовательских сеансов и симулировать поведенческие паттерны просмотра, неотличимые от пользователей-людей, чтобы эффективно обходить эти меры безопасности.

Построение основной архитектуры бота

Чтобы максимизировать вероятность успешных покупок, вам необходимо создать надежного бота, способного автоматизировать процесс покупки слепых коробок.

Шаг 1: Настройка окружения

Сначала убедитесь, что ваше операционное окружение готово, а Python и его необходимые зависимости установлены:

  1. Установите Python. Перейдите на официальную страницу загрузки Python, чтобы получить последнюю версию. Во время установки обязательно отметьте опцию "Добавить Python в PATH" для облегчения последующего выполнения скриптов.

  2. Установите Playwright. Выполните следующую команду pip в терминале для установки Playwright, а затем запустите сопутствующую команду для загрузки необходимых драйверов браузера:

    pip install playwright
    python -m playwright install
  3. Выберите планировщик задач. Учитывая, что вашему автоматизированному скрипту необходимо выполнять определенные операции в заданное время, выбор стабильного и надежного планировщика задач имеет решающее значение. APScheduler являетсяHighly recommended excellent option:

    pip install apscheduler

Шаг 2: Планирование директории проекта

Создайте выделенную папку для организации ваших проектных файлов, включая все скрипты и созданные данные. Для поддержания чистоты кода и изоляции окружения рекомендуется использовать виртуальное окружение Python. Перейдите в только что созданный каталог проекта в терминале:

cd path/to/your/project

Ваша система бота будет состоять из нескольких файлов. Вы можете создать все файлы сразу или добавлять их по мере развития проекта. Для ясности здесь приведен пример рекомендуемой структуры проекта:

popmart-bot (главный каталог)
    - data (каталог для хранения данных)
         - products.json (информация о продуктах)
    - job-scheduler.py (скрипт планирования задач)
    - main.py (основной скрипт входа)
    - popmart-scraper.py (скрипт для извлечения информации о продуктах)
    - purchase-bot.py (скрипт для выполнения покупок)

Шаг 3: Разработка основного контрольного скрипта

Сначала создайте основную точку входа для вашей системы бота. Создайте новый файл с именем main.py и добавьте следующий код на Python:

import subprocess
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime, timedelta

# Определите максимальное количество попыток и задержку перед повторной попыткой для скрапера
MAX_RETRIES = 5
RETRY_DELAY = 10

# Установите время выполнения скрапера (например, 6:00 утра)
HOUR = 6
MINUTE = 0
scheduler = BlockingScheduler()

def execute_daily_scraper():
    # Эта функция отвечает за запуск popmart-scraper.py и триггеринг job-scheduler.py по его завершении.
    print(f"\nЗапуск popmart-scraper, текущее время: {datetime.now().strftime(\\'%H:%M:%S\\')}")
    for attempt_num in range(1, MAX_RETRIES + 1):
        print(f"Попытка запуска скрапера, попытка {attempt_num}...")

        try:
            subprocess.run(["python3", "popmart-scraper.py"], check=True)
            print("Сбор информации о новых продуктах завершен успешно.")
            
            # После успешного сканирования немедленно запланируйте запуск job-scheduler
            scheduled_run_time = datetime.now() + timedelta(seconds=5)
            scheduler.add_job(execute_job_scheduler, trigger=\\'date\\', run_date=scheduled_run_time)
            print(f"job-scheduler.py начнет выполнение в {scheduled_run_time.strftime(\\'%H:%M:%S\\')}.")
            return  # Преждевременно покиньте цикл при успешном завершении

исключая subprocess.CalledProcessError как e:
            print(f"Ошибка выполнения скрапера (попытка {attempt_num}), код выхода: {e.returncode}")
            если attempt_num < MAX_RETRIES:
                print(f"Повторная попытка через {RETRY_DELAY} секунд...")
                time.sleep(RETRY_DELAY)

    print("Все попытки запуска скрапера завершились неудачно. Пожалуйста, проверьте popmart-scraper.py на наличие ошибок.")

def execute_job_scheduler():
    print(f"\nЗапуск job-scheduler.py")
    попытаться:
        subprocess.run(["python3", "job-scheduler.py"], check=True)
    исключение subprocess.CalledProcessError как e:
        print(f"Ошибка выполнения планировщика задач, код выхода: {e.returncode}")
        print("Пожалуйста, проверьте job-scheduler.py на наличие ошибок.")

если __name__ == "__main__":
    print("Скрипт main.py запущен...")
    execute_daily_scraper()  # Выполнить скрапер сразу после запуска скрипта

    # Настроить задачу по расписанию для ежедневного скрапинга
    scheduler.add_job(execute_daily_scraper, \\\'cron\\', hour=HOUR, minute=MINUTE)
    print(f"Ежедневный скрапер новых продуктов запланирован на выполнение каждый день в {HOUR:02d}:{MINUTE:02d}.")
    
    попытаться:
        scheduler.start()
    исключение (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()
        print("Планировщик задач благополучно завершил работу.")
```python
import subprocess
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime, timedelta

# Define maximum retries and retry delay for the scraper
MAX_RETRIES = 5
RETRY_DELAY = 10

# Set the daily scraper run time (e.g., 6:00 AM)
HOUR = 6
MINUTE = 0
scheduler = BlockingScheduler()

def execute_daily_scraper():
    # This function is responsible for starting popmart-scraper.py and triggering job-scheduler.py upon its completion.
    print(f"\nStarting popmart-scraper, current time: {datetime.now().strftime(\\'%H:%M:%S\\')}")
    for attempt_num in range(1, MAX_RETRIES + 1):
        print(f"Attempting to run scraper, attempt {attempt_num}...")

        try:
            subprocess.run(["python3", "popmart-scraper.py"], check=True)
            print("New product information scraping completed successfully.")
            
            # After successful scraping, immediately schedule job-scheduler to run
            scheduled_run_time = datetime.now() + timedelta(seconds=5)
            scheduler.add_job(execute_job_scheduler, trigger=\\'date\\', run_date=scheduled_run_time)
            print(f"job-scheduler.py will start at {scheduled_run_time.strftime(\\'%H:%M:%S\\')}.")
            return  # Exit loop early on success

        except subprocess.CalledProcessError as e:
            print(f"Scraper run failed (attempt {attempt_num}), exit code: {e.returncode}")
            if attempt_num < MAX_RETRIES:
                print(f"Retrying in {RETRY_DELAY} seconds...")
                time.sleep(RETRY_DELAY)

    print("All scraper run attempts failed. Please check popmart-scraper.py for issues.")

def execute_job_scheduler():
    print(f"\nRunning job-scheduler.py")
    try:
        subprocess.run(["python3", "job-scheduler.py"], check=True)
    except subprocess.CalledProcessError as e:
        print(f"Task scheduler run failed, exit code: {e.returncode}")
        print("Please check job-scheduler.py for issues.")

if __name__ == "__main__":
    print("main.py script started...")
    execute_daily_scraper()  # Execute scraper immediately when script starts

    # Configure daily scraper scheduled task
    scheduler.add_job(execute_daily_scraper, \\\'cron\\', hour=HOUR, minute=MINUTE)
    print(f"Daily new product scraper scheduled to run every day at {HOUR:02d}:{MINUTE:02d}.")
    
    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()
        print("Task scheduler gracefully shut down.")

Шаг 4: Скретчинг данных новой страницы продукта

Далее представлено содержимое скрипта popmart-scraper.py, ключевой частью которого является интегрированная конфигурация прокси Nstproxy:

import asyncio
import json
import os
from playwright.async_api import async_playwright
import sys

# Define target keywords for filtering relevant products
TARGET_KEYWORDS = ["CRYBABY", "Crybaby"]
# Base URL of the Pop Mart website
BASE_URL = "https://www.popmart.com"
# Output file path for saving scraped product data
OUTPUT_FILE = os.path.join("data", "products.json")

# Nstproxy proxy service configuration (please replace with your actual credentials)
# This information can usually be found in the "Proxy Setup" section of your Nstproxy user dashboard
NSTPROXY_USERNAME = "your_nstproxy_username"
NSTPROXY_PASSWORD = "your_nstproxy_password"
NSTPROXY_HOST = "gate.nstproxy.io" # Nstproxy gateway address, may vary
NSTPROXY_PORT = "24125" # Nstproxy port number, may vary

async def scrape_popmart_new_arrivals():
    print("New product information scraping task started...")

    try:
        async with async_playwright() as p:
            # Construct the Nstproxy proxy server connection string
            proxy_server_address = f"http://{NSTPROXY_USERNAME}:{NSTPROXY_PASSWORD}@{NSTPROXY_HOST}:{NSTPROXY_PORT}"
            
            # Launch Chromium browser instance and configure Nstproxy proxy
            browser_instance = await p.chromium.launch(
                headless=True, # Set to True to run in headless mode for efficiency
                proxy={
                    "server": proxy_server_address
                }
            )
            
            # Create a new browser context and configure the proxy again to ensure all requests go through the proxy
            browser_context = await browser_instance.new_context(
                proxy={
                    "server": proxy_server_address
                }
            )
            page_instance = await browser_context.new_page()
            # Navigate to Pop Mart new arrivals page, set timeout
            await page_instance.goto("https://www.popmart.com/us/new-arrivals", timeout=30000)
            # Wait for specific elements to load, indicating page content is mostly rendered
            await page_instance.wait_for_selector("div.index_title__jgc2z")

            # Attempt to handle and close potential location selection pop-up window
            try:
                location_popup_selector = "div.index_siteCountry___tWaj"
                # Briefly wait for pop-up to appear, no exception if not present
                await page_instance.wait_for_selector(location_popup_selector, timeout=2000)
                await page_instance.click(location_popup_selector)
                print("Location selection pop-up closed successfully.")
            except Exception:
                print("No location selection pop-up detected, continuing execution.")

            # Attempt to handle and close potential policy acceptance window
            try:
                policy_accept_selector = "div.policy_acceptBtn__ZNU71"

                # Wait for policy acceptance button to be visible
                await page_instance.wait_for_selector(policy_accept_selector, timeout=8000, state="visible")

                policy_button = await page_instance.query_selector(policy_accept_selector)

                if policy_button:
                    await asyncio.sleep(1)  # Give a small buffer time to ensure JavaScript is loaded
                    await policy_button.click()
                    print("Policy acceptance button clicked successfully.")
                else:
                    print("Could not find policy acceptance button.")
            except Exception as e:
                print(f"Policy acceptance pop-up did not appear or click failed: {e}")

            collected_results = []

            # Find all sections containing new product information
            info_sections = await page_instance.query_selector_all("div.index_title__jgc2z")

            for section_element in info_sections:
                release_date_text = (await section_element.text_content()).strip()

                # Get the product list container adjacent to the current section
                next_sibling_element = await section_element.evaluate_handle("el => el.nextElementSibling")
                product_card_elements = await next_sibling_element.query_selector_all("div.index_productCardCalendarContainer__B96oH")

                for card_element in product_card_elements:
                    # Extract product title
                    title_span = await card_element.query_selector("div.index_title__9DEwH span")
                    product_title = await title_span.text_content() if title_span else ""
                    # Filter products by keywords
                    if not any(keyword.lower() in product_title.lower() for keyword in TARGET_KEYWORDS):
                        continue

                    # Extract release time
                    time_div = await card_element.query_selector("div.index_time__EyE6b")
                    release_time_text = await time_div.text_content() if time_div else "N/A"

                    # Extract product URL
                    link_element = await card_element.query_selector("a[href^=\\'/us\\']")
                    product_href = await link_element.get_attribute("href") if link_element else None
                    full_product_url = f"{BASE_URL}{product_href}" if product_href else "N/A"

                    # Organize scraped data
                    product_entry = {
                        "title": product_title.strip(),
                        "release_date": release_date_text.strip(),  # e.g., "Upcoming JUL 11"
                        "release_time": release_time_text.strip(),     # e.g., "09:00"
                        "url": full_product_url
                    }
                    collected_results.append(product_entry)

            await browser_instance.close()

            # Save scraping results as a JSON file
            os.makedirs("data", exist_ok=True)
            with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
                json.dump(collected_results, f, indent=2, ensure_ascii=False)

            print(f"Successfully scraped {len(collected_results)} matching products. Data saved to {OUTPUT_FILE}")
    except Exception as e:
        print(f"Error during new product scraping: {e}")
        sys.exit(1)  # Exit with error code 1 on task failure


if __name__ == "__main__":
    asyncio.run(scrape_popmart_new_arrivals())

Основная функция этого скрипта — посетить страницу «Новые поступления» Pop Mart и извлечь информацию о графике релизов продуктов. Она сохранит название продукта, дату выпуска, конкретное время и соответствующий URL в файл data/products.json.

Кроме того, этот скрипт имеет следующие функции:

  • Интеллектуальная обработка всплывающих окон и навигации по сайту. Он может автоматически определять и закрывать потенциальные всплывающие окна выбора местоположения и принятия политики, обеспечивая плавный доступ к странице.
  • Интегрированная прокси-служба Nstproxy. Все сетевые запросы будут проходить через преднастроенный прокси-сервер Nstproxy, эффективно обходя ограничения IP и ограничения частоты, обеспечивая стабильность и анонимность процесса извлечения данных.
  • Механизм фильтрации по ключевым словам. Он собирает информацию о продуктах, в названии которых содержатся ключевые слова «CRYBABY» или «Crybaby», игнорируя другие нерелевантные продукты, тем самым повышая точность извлечения данных.

Шаг 5: Конфигурация планировщика задач

Скрипт job-scheduler.py является сердцем всей автоматизированной системы покупок, отвечающим за логику планирования задач:

import json
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
import subprocess
import os
import time
from datetime import datetime
import json
import sys

# Определите путь к файлу данных и параметры повторных попыток
DATA_FILE = os.path.join("data", "products.json")
MAX_RETRIES = 5
RETRY_DELAY = 10

def parse_product_release_datetime(date_string, time_string):
    # Преобразует строки, такие как "Upcoming JUL 11" и "09:00", в объекты datetime, по умолчанию устанавливая текущий год.
    try:
        # Убираем несущественные ключевые слова из строки даты
        for keyword_to_remove in ["Upcoming", "In Stock"]:
            date_string = date_string.replace(keyword_to_remove, "").strip()
        
        # Объединяем строки даты, года и времени, и разбираем в объект datetime
        full_datetime_string = f"{date_string} {datetime.now().year} {time_string}"
        # Пример формата: "JUL 11 2025 09:00"
        return datetime.strptime(full_datetime_string, "%b %d %Y %H:%M")
    except Exception as e:
        print(f"Не удалось разобрать дату, исходная строка: \\'{date_string} {time_string}\\', ошибка: {e}")
        return None

def initiate_purchase_bot(product_details):
    # Запускает сценарий purchase-bot.py с установленной логикой повторных попыток
    product_url = product_details.get("url")
    product_title = product_details.get("title")
    
    for attempt_count in range(MAX_RETRIES + 1):  # Включает первую попытку, а также повторные попытки
        print(f"Запуск бота для покупки товара \\'{product_title}\\' (попытка {attempt_count + 1}/{MAX_RETRIES + 1})...")
        try:
            # Предполагается, что purchase-bot.py правильно настроен с прокси Nstproxy
            subprocess.run(["python3", "purchase-bot.py", product_url], check=True)
            print(f"Успешно запущен бот для покупки товара \\'{product_title}\\'.")
            return  # Выйти сразу после успеха
        except subprocess.CalledProcessError as e:
            print(f"Ошибка запуска бота для покупки (попытка {attempt_count + 1}), код выхода: {e.returncode}")
            if attempt_count < MAX_RETRIES:
                print(f"Повторная попытка через {RETRY_DELAY} секунд...")
                time.sleep(RETRY_DELAY)
    print(f"Все попытки запустить бота для покупки товара \\'{product_title}\\' не удались.")

if __name__ == "__main__":
    scheduler_instance = BackgroundScheduler()

    if not os.path.exists(DATA_FILE):
        print(f"Ошибка: Файл данных {DATA_FILE} не существует. Пожалуйста, сначала выполните скрипт popmart-scraper.py для генерации данных.")
        sys.exit(1)

    with open(DATA_FILE, "r", encoding="utf-8") as f:
        all_products = json.load(f)

    for product_item in all_products:
        release_full_datetime = parse_product_release_datetime(product_item["release_date"], product_item["release_time"])
        if release_full_datetime and release_full_datetime > datetime.now():
            scheduler_instance.add_job(initiate_purchase_bot, 'date', run_date=release_full_datetime, args=[product_item])
            print(f"Успешно запланировано задание бота для покупки товара \\'{product_item['title']}\\' с началом в {release_full_datetime.strftime('%Y-%m-%d %H:%M:%S')}.")

    try:
        scheduler_instance.start()
        print("Планировщик задач успешно запущен. Ожидание выполнения запланированных задач...")
        # Держите основной поток активным, чтобы обеспечить правильную работу фонового планировщика
        while True:
            time.sleep(2)
    except (KeyboardInterrupt, SystemExit):
        scheduler_instance.shutdown()
        print("Планировщик задач остановлен.")

Основная функция этого скрипта заключается в том, чтобы читать информацию о товарах, хранящуюся в products.json, и динамически создавать задачу на покупку для каждого предстоящего выпуска товара. Он точно разбирает дату и время выпуска товара и автоматически запускает сценарий purchase-bot.py в установленный момент выпуска, чтобы выполнить операцию покупки.

Шаг 6: Разработка бота для выполнения покупок

Скрипт purchase-bot.py является ключевым компонентом, который фактически выполняет действие покупки. Он будет использовать фреймворк автоматизации браузера Playwright в сочетании с сервисом прокси Nstproxy, чтобы смоделировать поведение реального пользователя и завершить снайпинг товара.

import asyncio
import sys
from playwright.async_api import async_playwright

# Конфигурация службы прокси Nstproxy (пожалуйста, замените вашими фактическими данными)
NSTPROXY_USERNAME = "your_nstproxy_username"
NSTPROXY_PASSWORD = "your_nstproxy_password"
NSTPROXY_HOST = "gate.nstproxy.io" # Адрес шлюза Nstproxy
NSTPROXY_PORT = "24125" # Номер порта Nstproxy

async def execute_purchase_process(target_product_url):
    print(f"Попытка доступа к странице товара: {target_product_url}")
    try:
        async with async_playwright() as p:
            # Создаем полный адрес прокси-сервера Nstproxy, включая информацию об аутентификации
            proxy_connection_string = f"http://{NSTPROXY_USERNAME}:{NSTPROXY_PASSWORD}@{NSTPROXY_HOST}:{NSTPROXY_PORT}"
          
## Запустите браузер Chromium и настройте прокси. headless=False для наблюдения за поведением бота.
            browser_instance = await p.chromium.launch(
                headless=False, 
                proxy={
                    "server": proxy_connection_string
                }
            )
            # Создайте новый контекст браузера, чтобы убедиться, что настройки прокси будут действовать на протяжении всей сессии
            browser_context = await browser_instance.new_context(
                proxy={
                    "server": proxy_connection_string
                }
            )
            page_instance = await browser_context.new_page()
            # Перейдите на целевую страницу продукта, установите более длительный тайм-аут для сетевых задержек
            await page_instance.goto(target_product_url, timeout=60000)

            # Подождите, пока кнопка "Добавить в корзину" появится, и нажмите на нее
            # Примечание: Отрегулируйте этот селектор в зависимости от фактической структуры HTML сайта Pop Mart
            add_to_bag_button_selector = "button:has-text(\\"ДОБАВИТЬ В КОРЗИНУ\\")"
            await page_instance.wait_for_selector(add_to_bag_button_selector, timeout=30000)
            await page_instance.click(add_to_bag_button_selector)
            print(f"Успешно нажата кнопка \\"ДОБАВИТЬ В КОРЗИНУ\\" для продукта: {target_product_url}")

            # Подождите, пока страница корзины загрузится, и нажмите, чтобы зайти в корзину
            # Примечание: Отрегулируйте этот селектор в зависимости от фактической структуры HTML сайта Pop Mart
            shopping_cart_selector = "a[href*=\\'/cart\\']"
            await page_instance.wait_for_selector(shopping_cart_selector, timeout=30000)
            await page_instance.click(shopping_cart_selector)
            print("Успешно перешли на страницу корзины.")

            print("Браузер остается открытым, чтобы вы могли вручную завершить процесс оформления заказа.")
            # Держите окно браузера открытым, чтобы пользователь мог вмешаться и завершить такие чувствительные операции, как платеж
            await page_instance.wait_for_timeout(3600000) # Установите время ожидания 1 час, чтобы дать пользователю достаточно времени для действий

            await browser_instance.close()
            return 0 # Верните 0 за успешный процесс покупки
    except Exception as e:
        print(f"Ошибка во время процесса покупки: {e}")
        return 1 # Верните 1 за неудачный процесс покупки

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Использование: python3 purchase-bot.py <product_URL>")
        sys.exit(1)
    
    product_url_from_args = sys.argv[1]
    exit_code_result = asyncio.run(execute_purchase_process(product_url_from_args))
    sys.exit(exit_code_result)

Функция этого скрипта заключается в том, чтобы принять URL продукта в качестве аргумента, затем использовать Playwright для посещения этой страницы продукта, симулировать нажатие кнопки "Добавить в корзину" и в конечном итоге перейти на страницу корзины. Браузер останется открытым, чтобы пользователь мог вручную войти и завершить последние шаги оплаты.

Шаг 7: Запуск системы бота

Чтобы запустить вашу автоматизированную систему снайпинга слепых коробок, просто выполните скрипт main.py в вашем терминале:

python main.py

Продвинутые стратегии для высококонкурентных релизов

Когда вы сталкиваетесь с жесткой конкуренцией в релизах слепых коробок, полагаться исключительно на базовые функции автоматизации может быть недостаточно для обеспечения успеха. Вот некоторые продвинутые стратегии, которые могут помочь вашей системе ботов получить значительное преимущество:

Координация нескольких аккаунтов

Координируя покупки через несколько аккаунтов одновременно, вы можете значительно повысить шансы на успех в ограниченных релизах. Надежная система управления аккаунтами может эффективно обрабатывать процессы аутентификации и оформления заказа через несколько профилей пользователей, что приводит к более широкому охвату и более высоким показателям успеха.

Прогнозирование покупок

Использование моделей машинного обучения для проведения глубокого анализа исторических данных о продажах и текущих рыночных тенденций может помочь прогнозировать оптимальное время для покупок. Такие продвинутые системы могут даже запускать команды на покупку до того, как запас продукта будет видимо отображен, захватывая мимолетные возможности.

Точное прогнозирование запасов

Анализируя циклы пополнения продукции и информацию о цепочке поставок, можно предсказать, когда распроданные товары могут быть снова в наличии. Продвинутые боты, обладающие этой функцией, могут точно определить и воспользоваться этими возможностями пополнения, которые часто незаметны для ручных операторов.

Интеграция информации из сообщества

Постоянный мониторинг форумов коллекционеров, социальных платформ и торговых сообществ может помочь вам получить эксклюзивную внутреннюю информацию о предстоящих релизах и динамике рынка, предоставляя ценную поддержку данных для вашей снайперской стратегии.

Лучшие практики для тестирования и развертывания

Чтобы обеспечить надежность и уровень успеха вашего бота для снайпинга слепых коробок во время реальных релизов, систематическая стратегия тестирования и развертывания является необходимой.

Тестирование в песочнице

Тестирование в среде с низким риском - первый шаг к проверке стабильности основных функций вашего бота. Вы можете выбрать несколько непопулярных товаров или времена некошенного спроса, чтобы смоделировать полный процесс покупки. Это помогает выявить и исправить потенциальные логические ошибки перед фактическим снайпингом, избегая дорогостоящих ошибок при покупке товаров высокой стоимости.

Анализ и оптимизация узких мест в производительности

В сценариях с высокой конкурентной нагрузкой скорость отклика системы и использование ресурсов имеют ключевое значение для успеха. Вам необходимо углубленно проанализировать узкие места в производительности бота и оптимизировать их конкретно, обеспечивая максимальную эффективность на каждом этапе.

Мониторинг в реальном времени и система оповещений

Развертывание обширной системы мониторинга и оповещений позволяет вам в реальном времени следить за состоянием работы бота. Как только произойдет какое-либо отклонение или сбой, система должна немедленно отправить вам оповещение, чтобы вы могли быстро отреагировать и принять меры для обеспечения плавного выполнения задачи по снайпингу.

Решения по восстановлению после катастроф и резервному копированию

Чтобы предотвратить сбои в работе всей задачи снайпинга из-за единичных точек отказа, вам следует подготовить несколько решений по восстановлению после катастроф и резервному копированию для основных систем. Развернув несколько экземпляров бота в разных средах, вы сможете эффективно повысить надежность и устойчивость системы.

Заключение

Создав автоматизированного бота для снайпинга в интеграции с прокси-сервисом Nstproxy, вы сможете превратить пассивное в активное, преобразив разочаровывающий опыт ручной покупки в стратегические и интеллектуальные соревнования. Мощная система, которая объединяет интеллектуальный мониторинг, современные методы противодействия обнаружению и стабильную прокси-сеть, станет вашим самым острым инструментом для выделения на конкурентном рынке «слепых коробок» и приобретения ваших любимых коллекционных предметов.

Дорога к успеху вымощена вниманием к техническим деталям, строгим тестированием и валидацией, а также постоянным анализом и адаптацией к стратегиям противодействия ботам таких платформ, как Pop Mart. Безусловно, инвестиции в автоматизированный снайпинг принесут вам большие дивиденды — те когда-то недосягаемые редкие коллекционные предметы теперь на расстоянии вытянутой руки.

Теперь давайте вместе воплотим теорию в действие, создадим ваше собственное автоматизированное решение для снайпинга и превратим повторяющиеся неудачи в покупки в успехи и радости. В этом ярком и увлекательном мире сбора «слепых коробок» хорошо продуманный бот поможет вам всегда быть на шаг впереди, в конечном итоге обняв те произведения, которые глубоко отзываются в вашем сердце.

Kai Watanabe
Kai WatanabeScraping Infrastructure Evangelist
Каталог

Nstproxy

Масштабирование бизнеса с помощью Nstproxy

Nstproxy
© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED