Quay lại Blog
Sep. 26th 2025

Cách Xây Dựng Bot Săn Hộp Mù Pop Mart: Hướng Dẫn Tự Động Hóa Hoàn Chỉnh Cho Các Nhà Sưu Tầm

Hãy tìm hiểu cách xây dựng một bot chặn hộp mù Pop Mart với Nstproxy. Hướng dẫn này bao gồm các bước tự động hóa từng bước với Python + Playwright, tích hợp proxy, và các chiến lược để vượt qua những kẻ đầu cơ cho các đồ sưu tầm hiếm.

Việc phát hành các hộp mù rất được săn đón thường kết thúc chỉ trong tích tắc, để lại vô số người đam mê thất bại trong cuộc chiến chống lại các kịch bản tự động. Bằng cách xây dựng một công cụ tự động hóa chuyên dụng, những người sưu tầm bình thường có thể đạt được phản hồi ở mức mili giây, giám sát tồn kho theo thời gian thực và cạnh tranh bình đẳng với các tay buôn bán hàng bằng cách sử dụng các công cụ chuyên nghiệp. Bạn đã sẵn sàng để sở hữu những món sưu tầm hiếm có đầy khao khát chưa?

Tại Sao Nên Tự Động Hóa Mua Hộp Mù?

Giữa bộ sưu tập đồ chơi thiết kế lấp lánh của Pop Mart, loạt hộp mù nổi bật với sức hấp dẫn độc đáo của nó. Được tạo ra bởi nghệ sĩ Molly Yllom, loạt đồ này khéo léo kết hợp những biểu cảm tình cảm phức tạp, gây tiếng vang sâu sắc với những người sưu tầm coi trọng sức khỏe tâm thần và sự kết nối tình cảm.

Loạt này đã thành công trong việc ra mắt một số chủ đề phổ biến, chẳng hạn như "Khóc Một Lần Nữa", "Nhà Máy Nước Mắt", và "Khóc Vì Tình Yêu", và đã hợp tác với các thương hiệu nổi tiếng như The Powerpuff Girls. Mỗi chủ đề thường bao gồm 6 đến 12 thiết kế khác biệt, trong khi các phiên bản bí mật rất được mong đợi xuất hiện khoảng một lần cho mỗi 72 đến 288 hộp mù, với độ hiếm cụ thể tùy theo loạt.

Đối với những người sưu tầm hộp mù, việc mua thủ công rất khó khăn, chủ yếu do tình cảm sâu sắc mà người hâm mộ dành cho những tác phẩm nghệ thuật này. Những bức tượng này không chỉ là hàng tiêu dùng đơn giản; chúng là những phần có ý nghĩa trong bộ sưu tập cá nhân. Mối liên kết cảm xúc mạnh mẽ này dẫn đến nhu cầu thị trường vượt xa nguồn cung thực tế, làm cho việc mua sắm tự động trở thành chiến lược quan trọng để đảm bảo việc sở hữu thành công.

Tại Sao Khi Mua Hộp Mù Bằng Tay Thường Thất Bại

Hiểu biết sâu sắc về các rào cản kỹ thuật mà việc mua thủ công đối mặt trong các đợt phát hành hộp mù cho thấy sự cần thiết không thể thiếu của các công cụ tự động hóa.

Trang web chính thức của Pop Mart triển khai nhiều lớp cơ chế chống tự động hóa phức tạp, bao gồm nhận diện CAPTCHA, hạn chế tần suất truy cập theo địa chỉ IP, và kiểm soát truy cập theo khu vực. Trong những thời điểm mua sắm cao điểm khi nhu cầu sản phẩm tăng vọt, các máy chủ thường quá tải do lưu lượng truy cập lớn, dẫn đến việc tải trang rất chậm hoặc thậm chí hoàn toàn sập, khiến cho việc thao tác thủ công gần như không khả thi.

Mô hình bán hàng hộp mù càng làm gia tăng sự cạnh tranh vì người tiêu dùng không thể xác định thiết kế cụ thể trước khi mua. Nhiều nhà sưu tầm, với mục tiêu muốn có một thiết kế cụ thể mong muốn hoặc một phiên bản bí mật hiếm, chọn mua số lượng lớn, điều này chắc chắn làm tăng nhu cầu thị trường, khiến cho các mặt hàng bán hết chỉ trong vài phút hoặc thậm chí vài giây.

Ngược lại, những nhà đầu cơ thị trường chuyên nghiệp (thường được gọi là "cò") thường sử dụng các hệ thống giao dịch tự động cao, có khả năng xử lý với tốc độ mili giây. Người tiêu dùng bình thường, chỉ dựa vào các trình duyệt truyền thống cho các thao tác thủ công, không thể cạnh tranh với tốc độ của các hệ thống tự động. Do đó, phát triển một bot mua hàng tự động chuyên dụng đã trở thành cách duy nhất hiệu quả để đảm bảo việc sở hữu thành công các hộp mù phiên bản giới hạn.

Các Thành Phần Cốt Lõi Để Xây Dựng Bot Mua Hộp Mù

Để sở hữu thành công những món đồ hộp mù bạn mong muốn trong các đợt phát hành giới hạn của Pop Mart, bạn cần tích hợp một loạt các yếu tố kỹ thuật hỗ trợ một cách kỹ lưỡng.

Ngôn Ngữ Lập Trình Python

Python là trụ cột chính để xây dựng hệ thống mua hàng tự động, cung cấp nền tảng lập trình cần thiết để thực thi các kịch bản tự động. Với độ linh hoạt tuyệt vời, Python có thể xử lý hiệu quả thiết kế kiến trúc phức tạp của trang web Pop Mart và nhanh chóng thích nghi với những thay đổi động trong trạng thái tồn kho.

Framework Tự Động Hóa Trình Duyệt Playwright

Playwright sẽ là công cụ mạnh mẽ cho bạn trong việc tự động hóa trình duyệt, cho phép các kịch bản của bạn hoạt động trên trang web Pop Mart một cách giả lập cao. Dù là xử lý các trang JavaScript phức tạp, giả lập các cú nhấp chuột, hoặc thực hiện các hành vi điều hướng khác, Playwright có thể thực thi chính xác như một người dùng thực, hướng dẫn quá trình mua hàng đến khi hoàn tất mà không cần can thiệp thủ công.

Driver Trình Duyệt Chrome hoặc Firefox

Các driver này cung cấp môi trường runtime cho Playwright. Đảm bảo rằng phiên bản trình duyệt bạn sử dụng tương thích với driver tương ứng là điều cần thiết để thực hiện quy trình tự động một cách suôn sẻ trong những thời điểm mua hàng quan trọng.

Dịch Vụ Proxy Residential Nstproxy

Dịch vụ proxy residential Nstproxy cung cấp sự bảo vệ quan trọng cho các hoạt động tự động của bạn bằng cách thay đổi địa chỉ IP một cách động từ các thiết bị gia đình thực. Cơ chế này ngăn chặn hiệu quả việc phát hiện bởi các hệ thống chống gian lận của trang web, đảm bảo quyền truy cập của bạn không bị ảnh hưởng trong các đợt phát hành có lượng truy cập cao. Nó vượt qua hiệu quả các hạn chế IP của trang web và nhiều chiến lược chống crawler khác nhau, khiến hành vi mua hàng của bạn trở nên tự nhiên và không bị phát hiện.

Tài Khoản Người Dùng Pop Mart

Một số giao dịch mua sản phẩm yêu cầu liên kết với tài khoản Pop Mart. Việc có và quản lý nhiều tài khoản hoạt động sẽ tăng đáng kể cơ hội của bạn trong việc thu được các món đồ phiên bản giới hạn trong cuộc cạnh tranh khốc liệt, vì mỗi tài khoản đại diện cho một kênh mua hàng độc lập.

Phân tích quy trình thanh toán của Pop Mart

Để xây dựng một bot săn hộp mù hiệu quả và đáng tin cậy, cần có hiểu biết sâu sắc về kiến trúc cơ bản của Pop Mart và quy trình thanh toán của nó.

Các trang sản phẩm thường theo một cấu trúc URL thống nhất, chứa mã nhận diện loạt sản phẩm và mã sản phẩm cụ thể. Ví dụ, các sản phẩm hộp mù thường xuất hiện dưới các đường dẫn như "/us/products/[product_number]/CRYBABY…", làm cơ sở cho việc giám sát tự động và phân tích dữ liệu.

Những thay đổi theo thời gian trong trạng thái hàng tồn kho sẽ kích hoạt các phản hồi khác nhau trong việc hiển thị trang và tương tác, và bot của bạn phải có khả năng xác định chính xác những thay đổi này. Ví dụ, khi một mặt hàng hết hàng, nút "Thêm vào giỏ" sẽ không khả dụng; trong khi các mặt hàng còn hàng sẽ hiển thị các tùy chọn mua có thể thực hiện và cập nhật thông tin hàng tồn kho theo thời gian thực.

Các cơ chế phòng chống bot của Pop Mart hiện diện trong suốt quá trình mua hàng. Do đó, hệ thống tự động của bạn cần có khả năng xử lý CAPTCHAs, xác thực hiệu quả phiên người dùng và mô phỏng các mẫu hành vi duyệt web không thể phân biệt với người dùng thực để vượt qua các phát hiện an ninh này một cách hiệu quả.

Xây dựng kiến trúc bot chính

Để tối đa hóa tỷ lệ thành công của các giao dịch mua, bạn cần xây dựng một bot đáng tin cậy có khả năng tự động hóa quy trình mua hộp mù.

Bước 1: Thiết lập môi trường

Đầu tiên, hãy đảm bảo rằng môi trường làm việc của bạn đã sẵn sàng và Python cùng với các phụ thuộc cần thiết đã được cài đặt:

  1. Cài đặt Python. Truy cập trang tải về chính thức của Python để lấy phiên bản mới nhất. Trong quá trình cài đặt, hãy chắc chắn đánh dấu tùy chọn "Add Python to PATH" để dễ dàng thực thi script sau này.

  2. Cài đặt Playwright. Thực hiện lệnh pip sau trong terminal để cài đặt Playwright và sau đó chạy lệnh đi kèm của nó để tải xuống các trình điều khiển trình duyệt cần thiết:

    pip install playwright
    python -m playwright install
  3. Chọn một Trình lập lịch tác vụ. Do kịch bản tự động hóa của bạn cần thực hiện các thao tác cụ thể vào những thời điểm đã được thiết lập, việc chọn một trình lập lịch tác vụ ổn định và đáng tin cậy là rất quan trọng. APScheduler là một lựa chọn tuyệt vời rất được khuyến nghị:

    pip install apscheduler

Bước 2: Lập kế hoạch thư mục dự án

Tạo một thư mục chuyên biệt để tổ chức các tệp dự án của bạn, bao gồm tất cả các kịch bản và dữ liệu đã được tạo. Để duy trì sự sạch sẽ của mã và cách ly môi trường, rất nên sử dụng môi trường ảo Python. Điều hướng đến thư mục dự án mới tạo của bạn trong terminal:

cd path/to/your/project

Hệ thống bot của bạn sẽ bao gồm nhiều tệp. Bạn có thể chọn tạo tất cả tệp ngay lúc đầu hoặc thêm chúng dần dần khi phát triển tiến triển. Để rõ ràng, dưới đây là một ví dụ về cấu trúc dự án được đề xuất:

popmart-bot (thư mục chính)
    - data (thư mục lưu trữ dữ liệu)
         - products.json (thông tin sản phẩm)
    - job-scheduler.py (kịch bản lập lịch tác vụ)
    - main.py (kịch bản điểm vào chính)
    - popmart-scraper.py (kịch bản thu thập thông tin sản phẩm)
    - purchase-bot.py (kịch bản thực hiện mua hàng)

Bước 3: Phát triển kịch bản điều khiển chính

Đầu tiên, hãy tạo một điểm vào chính cho hệ thống bot của bạn. Tạo một tệp mới có tên main.py và thêm đoạn mã Python sau:

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

# Định nghĩa số lần thử tối đa và độ trễ thử lại cho trình thu thập thông tin
MAX_RETRIES = 5
RETRY_DELAY = 10

# Thiết lập thời gian chạy trình thu thập thông tin hàng ngày (ví dụ: 6:00 sáng)
HOUR = 6
MINUTE = 0
scheduler = BlockingScheduler()

def execute_daily_scraper():
    # Hàm này chịu trách nhiệm khởi động popmart-scraper.py và kích hoạt job-scheduler.py sau khi hoàn thành.
    print(f"\nBắt đầu popmart-scraper, thời gian hiện tại: {datetime.now().strftime(\\'%H:%M:%S\\')}")
    for attempt_num in range(1, MAX_RETRIES + 1):
        print(f"Đang cố gắng chạy trình thu thập thông tin, lần thử {attempt_num}...")

        try:
            subprocess.run(["python3", "popmart-scraper.py"], check=True)
            print("Việc thu thập thông tin sản phẩm mới đã hoàn tất thành công.")
            
            # Sau khi thu thập thông tin thành công, ngay lập tức lên lịch job-scheduler để chạy
            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 sẽ bắt đầu vào {scheduled_run_time.strftime(\\'%H:%M:%S\\')}.")
            return  # Thoát sớm khỏi vòng lặp khi thành công
trừ subprocess.CalledProcessError như e:
            in ra(f"Chạy scraper thất bại (số lần thử {attempt_num}), mã thoát: {e.returncode}")
            nếu attempt_num < MAX_RETRIES:
                in ra(f"Thử lại sau {RETRY_DELAY} giây...")
                time.sleep(RETRY_DELAY)

    in ra("Tất cả các lần chạy scraper đều thất bại. Vui lòng kiểm tra popmart-scraper.py để tìm vấn đề.")

def execute_job_scheduler():
    in ra(f"\nChạy job-scheduler.py")
    thử:
        subprocess.run(["python3", "job-scheduler.py"], check=True)
    ngoại trừ subprocess.CalledProcessError như e:
        in ra(f"Chạy lịch trình tác vụ thất bại, mã thoát: {e.returncode}")
        in ra("Vui lòng kiểm tra job-scheduler.py để tìm vấn đề.")

nếu __name__ == "__main__":
    in ra("Kịch bản main.py đã bắt đầu...")
    execute_daily_scraper()  # Thực thi scraper ngay lập tức khi kịch bản bắt đầu

    # Cấu hình tác vụ scraper hàng ngày
    scheduler.add_job(execute_daily_scraper, \\\'cron\\', giờ=HOUR, phút=MINUTE)
    in ra(f"Scraper sản phẩm mới hàng ngày đã được lên lịch chạy mỗi ngày vào lúc {HOUR:02d}:{MINUTE:02d}.")
    
    thử:
        scheduler.start()
    ngoại trừ (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()
        in ra("Lịch trình tác vụ đã tắt một cách an toàn.")

Các chức năng chính của kịch bản chính này bao gồm:

  • Khởi tạo tác vụ scraper. main.py sẽ lập tức thực thi popmart-scraper.py khi khởi động để lấy thông tin sản phẩm mới nhất.
  • Lập lịch tác vụ liên kết. Khi tác vụ scraper hoàn thành thành công, nó sẽ tự động kích hoạt job-scheduler.py, chịu trách nhiệm xử lý và sắp xếp các tác vụ mua sắm tiếp theo.
  • Cơ chế thử lại vững chắc. Nếu popmart-scraper.py thất bại trong quá trình thực thi, kịch bản sẽ chờ 10 giây trước khi tự động thử lại, tối đa 5 lần, để cải thiện tỷ lệ thành công của tác vụ.
  • Scraping hàng ngày theo lịch trình. Kịch bản sử dụng lịch trình kiểu cron để đảm bảo popmart-scraper.py tự động chạy vào một thời điểm nhất định hàng ngày, liên tục cập nhật dữ liệu sản phẩm.

Bước 4: Scraping Dữ liệu Trang Sản Phẩm Mới

Tiếp theo là nội dung chi tiết của kịch bản popmart-scraper.py, với phần quan trọng là cấu hình tích hợp của proxy 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())

Chức năng chính của script này là truy cập trang "Sản phẩm Mới" của Pop Mart và thu thập thông tin lịch phát hành sản phẩm. Nó sẽ lưu tên sản phẩm, ngày phát hành, thời gian cụ thể và URL tương ứng vào tệp data/products.json.

Ngoài ra, script này còn có những tính năng sau:

  • Xử lý thông minh các pop-up và điều hướng trên trang web. Nó có thể tự động nhận diện và đóng các cửa sổ pop-up chọn vị trí và chấp nhận chính sách, đảm bảo truy cập trang mượt mà.
  • Dịch vụ proxy Nstproxy tích hợp. Tất cả các yêu cầu mạng sẽ được định tuyến qua máy chủ proxy Nstproxy đã được cấu hình trước, hiệu quả vượt qua các hạn chế IP của trang web và giới hạn về tỷ lệ, đảm bảo độ ổn định và ẩn danh của quá trình thu thập dữ liệu.
  • Cơ chế lọc theo từ khóa. Nó chỉ thu thập thông tin sản phẩm mà tiêu đề chứa các từ khóa "CRYBABY" hoặc "Crybaby", bỏ qua các sản phẩm không liên quan khác, từ đó cải thiện độ chính xác của quá trình thu thập dữ liệu.

Bước 5: Cấu hình Lịch trình Công việc

Script job-scheduler.py là phần cốt lõi của toàn bộ hệ thống mua sắm tự động, chịu trách nhiệm cho logic lập lịch nhiệm vụ chính:

import json
from datetime import datetime
từ apscheduler.schedulers.background nhập BackgroundScheduler
nhập subprocess
nhập os
nhập time

# Định nghĩa đường dẫn tệp dữ liệu và các tham số thử lại
DATA_FILE = os.path.join("dữ liệu", "products.json")
MAX_RETRIES = 5
RETRY_DELAY = 10

def parse_product_release_datetime(date_string, time_string):
    # Chuyển đổi các chuỗi như "Sắp tới JUL 11" và "09:00" thành các đối tượng datetime, mặc định là năm hiện tại.
    try:
        # Làm sạch các từ khóa không liên quan từ chuỗi ngày
        cho keyword_to_remove trong ["Sắp tới", "Có sẵn"]:
            date_string = date_string.replace(keyword_to_remove, "").strip()
        
        # Kết hợp ngày, năm và chuỗi thời gian, và phân tích thành một đối tượng datetime
        full_datetime_string = f"{date_string} {datetime.now().year} {time_string}"
        # Định dạng ví dụ: "JUL 11 2025 09:00"
        return datetime.strptime(full_datetime_string, "%b %d %Y %H:%M")
    ngoại lệ là e:
        print(f"Không thể phân tích datetime, chuỗi nguồn: \\'{date_string} {time_string}\\', lỗi: {e}")
        return None

def initiate_purchase_bot(product_details):
    # Khởi động script purchase-bot.py với logic thử lại tích hợp
    product_url = product_details.get("url")
    product_title = product_details.get("title")
    
    cho attempt_count trong range(MAX_RETRIES + 1):  # Bao gồm cả lần thử đầu tiên cũng như các lần thử lại
        print(f"Khởi động bot mua cho sản phẩm \\'{product_title}\\' (thử {attempt_count + 1}/{MAX_RETRIES + 1})...")
        try:
            # Giả sử purchase-bot.py đã được cấu hình đúng với proxy Nstproxy
            subprocess.run(["python3", "purchase-bot.py", product_url], check=True)
            print(f"Khởi động bot mua thành công cho sản phẩm \\'{product_title}\\'.")
            return  # Thoát ngay lập tức khi thành công
        ngoại lệ là subprocess.CalledProcessError là e:
            print(f"Chạy bot mua thất bại (thử {attempt_count + 1}), mã thoát: {e.returncode}")
            nếu attempt_count < MAX_RETRIES:
                print(f"Thử lại trong {RETRY_DELAY} giây...")
                time.sleep(RETRY_DELAY)
    print(f"Tất cả các lần thử khởi động bot mua cho sản phẩm \\'{product_title}\\' đã thất bại.")

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

    nếu không os.path.exists(DATA_FILE):
        print(f"Lỗi: Tệp dữ liệu {DATA_FILE} không tồn tại. Vui lòng chạy script popmart-scraper.py trước để tạo dữ liệu.")
        sys.exit(1)

    với open(DATA_FILE, "r", encoding="utf-8") như f:
        all_products = json.load(f)

    cho product_item trong all_products:
        release_full_datetime = parse_product_release_datetime(product_item["release_date"], product_item["release_time"])
        nếu release_full_datetime và release_full_datetime > datetime.now():
            scheduler_instance.add_job(initiate_purchase_bot, \\\'date\\', run_date=release_full_datetime, args=[product_item])
            print(f"Lên lịch tác vụ bot mua thành công cho sản phẩm \\'{product_item[\\\\'title\\\']}\\' để bắt đầu vào {release_full_datetime.strftime(\\'%Y-%m-%d %H:%M:%S\\')}.")

    thử:
        scheduler_instance.start()
        print("Trình lập lịch tác vụ đã bắt đầu thành công. Đang chờ các tác vụ đã lên lịch thực thi...")
        # Giữ cho luồng chính sống để đảm bảo trình lập lịch nền chạy đúng cách
        trong khi True:
            time.sleep(2)
    ngoại lệ (KeyboardInterrupt, SystemExit):
        scheduler_instance.shutdown()
        print("Trình lập lịch tác vụ đã ngừng chạy.")

Chức năng cốt lõi của script này là đọc thông tin sản phẩm được lưu trữ trong products.json và tạo ra một tác vụ mua hàng động cho mỗi sản phẩm sắp phát hành. Nó phân tích chính xác ngày và giờ phát hành của sản phẩm, và tự động khởi động script purchase-bot.py vào thời điểm phát hành đã định để thực hiện thao tác mua hàng.

Bước 6: Phát triển Bot Thực Thi Mua Hàng

Script purchase-bot.py là thành phần chính thực hiện hành động mua hàng. Nó sẽ tận dụng khung tự động hóa trình duyệt Playwright, kết hợp với dịch vụ proxy Nstproxy, để mô phỏng hành vi người dùng thực tế và hoàn thành việc chốt hàng sản phẩm.

import asyncio
import sys
from playwright.async_api import async_playwright

# Cấu hình dịch vụ proxy Nstproxy (vui lòng thay thế bằng thông tin xác thực thực tế của bạn)
NSTPROXY_USERNAME = "tên_người_dùng_nstproxy_của_bạn"
NSTPROXY_PASSWORD = "mật_khẩu_nstproxy_của_bạn"
NSTPROXY_HOST = "gate.nstproxy.io" # Địa chỉ cổng Nstproxy
NSTPROXY_PORT = "24125" # Số cổng Nstproxy

async def execute_purchase_process(target_product_url):
    print(f"Đang cố gắng truy cập trang sản phẩm: {target_product_url}")
    thử:
        async với async_playwright() như p:
            # Xây dựng địa chỉ máy chủ proxy Nstproxy đầy đủ, bao gồm thông tin xác thực
            proxy_connection_string = f"http://{NSTPROXY_USERNAME}:{NSTPROXY_PASSWORD}@{NSTPROXY_HOST}:{NSTPROXY_PORT}"

# Khởi động trình duyệt Chromium và cấu hình proxy. headless=False để quan sát hành vi của bot.
            browser_instance = await p.chromium.launch(
                headless=False, 
                proxy={
                    "server": proxy_connection_string
                }
            )
            # Tạo một ngữ cảnh trình duyệt mới để đảm bảo cài đặt proxy có hiệu lực trong suốt phiên làm việc
            browser_context = await browser_instance.new_context(
                proxy={
                    "server": proxy_connection_string
                }
            )
            page_instance = await browser_context.new_page()
            # Điều hướng đến trang sản phẩm mục tiêu, đặt thời gian chờ lâu hơn cho các độ trễ mạng
            await page_instance.goto(target_product_url, timeout=60000)

            # Chờ nút "Thêm vào túi" xuất hiện và nhấp vào nó
            # Lưu ý: Điều chỉnh bộ chọn này dựa trên cấu trúc HTML thực tế của trang web Pop Mart
            add_to_bag_button_selector = "button:has-text(\\"THÊM VÀO TÚI\\")"
            await page_instance.wait_for_selector(add_to_bag_button_selector, timeout=30000)
            await page_instance.click(add_to_bag_button_selector)
            print(f"Nhấp vào nút \\"THÊM VÀO TÚI\\" cho sản phẩm: {target_product_url} thành công.")

            # Chờ trang giỏ hàng tải xong và nhấp để vào giỏ
            # Lưu ý: Điều chỉnh bộ chọn này dựa trên cấu trúc HTML thực tế của trang web 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("Điều hướng đến trang giỏ hàng thành công.")

            print("Trình duyệt vẫn mở để bạn hoàn thành quy trình thanh toán bằng tay.")
            # Giữ cho cửa sổ trình duyệt mở để người dùng can thiệp và hoàn thành các thao tác nhạy cảm như thanh toán
            await page_instance.wait_for_timeout(3600000) # Đặt thời gian chờ 1 giờ để người dùng có đủ thời gian hoạt động

            await browser_instance.close()
            return 0 # Trả về 0 cho quy trình mua hàng thành công
    except Exception as e:
        print(f"Lỗi trong quá trình mua hàng: {e}")
        return 1 # Trả về 1 cho quy trình mua hàng thất bại
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Sử dụng: 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)

Chức năng của script này là nhận một URL sản phẩm làm đối số, sau đó sử dụng Playwright để truy cập trang sản phẩm đó, mô phỏng việc nhấn nút "Thêm vào túi", và cuối cùng điều hướng đến trang giỏ hàng. Trình duyệt sẽ vẫn mở để người dùng có thể đăng nhập bằng tay và hoàn tất các bước thanh toán cuối cùng.

Bước 7: Khởi động Hệ thống Bot

Để khởi động hệ thống tự động săn hộp mù của bạn, chỉ cần chạy script main.py trong terminal của bạn:

python main.py

Chiến Lược Nâng Cao cho Những Lần Phát Hành Cạnh Tranh Cao

Khi đối mặt với những lần phát hành hộp mù cạnh tranh gay gắt, chỉ dựa vào các tính năng tự động hóa cơ bản có thể không đủ để đảm bảo thành công. Dưới đây là một số chiến lược nâng cao có thể giúp hệ thống bot của bạn đạt được lợi thế đáng kể:

Phối Hợp Nhiều Tài Khoản

Bằng cách phối hợp mua sắm qua nhiều tài khoản đồng thời, bạn có thể tăng đáng kể cơ hội thành công trong các lần phát hành có hạn. Một hệ thống quản lý tài khoản vững mạnh có thể xử lý hiệu quả các quá trình xác thực và thanh toán qua nhiều hồ sơ người dùng, dẫn đến việc bao phủ rộng hơn và tỷ lệ thành công cao hơn.

Quyết Định Mua Sắm Dự Đoán

Sử dụng các mô hình máy học để thực hiện phân tích sâu về dữ liệu bán hàng lịch sử và xu hướng thị trường hiện tại có thể dự đoán thời điểm mua tối ưu. Các hệ thống nâng cao như vậy thậm chí có thể kích hoạt lệnh mua trước khi hàng tồn kho sản phẩm được hiển thị công khai, nắm bắt các cơ hội thoáng qua.

Dự Đoán Hàng Tồn Kho Chính Xác

Bằng cách phân tích chu kỳ bổ sung sản phẩm và thông tin chuỗi cung ứng, có thể dự đoán khi các mặt hàng đã bán hết có thể được bổ sung. Các bot nâng cao được trang bị tính năng này có thể định vị và tận dụng những cơ hội bổ sung này một cách chính xác, điều mà thường không được các nhà điều hành bằng tay nhận thấy.

Tích Hợp Thông Tin Cộng Đồng

Theo dõi liên tục các diễn đàn của nhà sưu tầm, các nền tảng truyền thông xã hội và cộng đồng giao dịch có thể giúp bạn thu thập thông tin nội bộ độc quyền về các lần phát hành sắp tới và động thái thị trường, cung cấp hỗ trợ dữ liệu quý giá cho chiến lược săn hàng của bạn.

Thực Tiễn Tốt Nhất cho Testing và Triển Khai

Để đảm bảo độ tin cậy và tỷ lệ thành công của bot săn hộp mù của bạn trong các lần phát hành thực tế, một chiến lược testing và triển khai có hệ thống là điều không thể thiếu.

Testing Trong Môi Trường Sandbox

Kiểm tra trong môi trường sandbox có rủi ro thấp là bước đầu tiên để xác minh tính ổn định của các chức năng cốt lõi của bot của bạn. Bạn có thể chọn một số mặt hàng không phổ biến hoặc thời gian không cao điểm để mô phỏng quy trình mua hàng hoàn chỉnh. Điều này giúp xác định và khắc phục các lỗi logic tiềm ẩn trước khi thực hiện sniping thực tế, tránh những sai lầm tốn kém trong quá trình mua hàng có giá trị cao.

Phân Tích và Tối Ưu Tắc Nghẽn Hiệu Suất

Trong các kịch bản sniping có tính đồng thời cao, tốc độ phản hồi của hệ thống và khả năng sử dụng tài nguyên là chìa khóa để thành công. Bạn cần phân tích sâu các tắc nghẽn hiệu suất của bot và tối ưu hóa chúng một cách cụ thể, đảm bảo rằng mỗi bước hoạt động với hiệu suất tối đa.

Hệ Thống Giám Sát Thời Gian Thực và Cảnh Báo

Triển khai một hệ thống giám sát và cảnh báo toàn diện cho phép bạn nắm bắt trạng thái hoạt động của bot trong thời gian thực. Khi bất kỳ bất thường hoặc sự cố nào xảy ra, hệ thống nên ngay lập tức gửi cho bạn một cảnh báo, giúp bạn nhanh chóng phản ứng và thực hiện các biện pháp để đảm bảo tiến trình suôn sẻ của nhiệm vụ sniping.

Giải Pháp Khôi Phục Thảm Họa và Sao Lưu

Để ngăn chặn các điểm lỗi đơn lẻ gây ra sự cố cho toàn bộ nhiệm vụ sniping, bạn nên chuẩn bị nhiều giải pháp khôi phục thảm họa và sao lưu cho các hệ thống cốt lõi. Bằng cách triển khai nhiều phiên bản bot trong các môi trường khác nhau, bạn có thể cải thiện hiệu quả độ bền và độ tin cậy của hệ thống.

Kết Luận

Bằng cách xây dựng một bot sniping tự động tích hợp với dịch vụ proxy Nstproxy, bạn sẽ có thể biến thụ động thành chủ động, biến những trải nghiệm mua sắm thủ công đầy thất vọng thành những cuộc thi chiến lược và thông minh. Một hệ thống mạnh mẽ kết hợp giám sát thông minh, kỹ thuật chống phát hiện tiên tiến và mạng lưới proxy ổn định sẽ là công cụ sắc bén nhất của bạn để nổi bật trong thị trường hộp mù cạnh tranh và thu thập những món đồ yêu thích của bạn.

Con đường đến thành công được trải bằng sự chú ý cực kỳ đến các chi tiết kỹ thuật, thử nghiệm và xác thực nghiêm ngặt, cũng như cái nhìn liên tục vào và thích ứng với các chiến lược chống bot của các nền tảng như Pop Mart. Không nghi ngờ gì, việc đầu tư vào sniping tự động sẽ mang lại cho bạn những phần thưởng phong phú—những món đồ hiếm có từng không thể với tới giờ đây nằm trong tầm tay.

Bây giờ, hãy cùng nhau biến lý thuyết thành hành động, xây dựng giải pháp sniping tự động của riêng bạn, và biến những thất bại trong việc mua hàng lặp đi lặp lại thành thành công và niềm vui. Trong thế giới sưu tầm hộp mù đầy màu sắc và đam mê này, một bot được thiết kế tốt sẽ giúp bạn luôn đi trước, cuối cùng chào đón những tác phẩm mà bạn thực sự yêu thích.

Kai Watanabe
Kai WatanabeScraping Infrastructure Evangelist
Mục lục

Nstproxy

Mở rộng quy mô kinh doanh của bạn với Nstproxy

Nstproxy
© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED