Аукционные платформы защищают данные листинга и функции поиска с помощью reCAPTCHA v2. CAPTCHA чаще всего появляется во время быстрых поисковых запросов, просмотра подробных списков и просмотра истории ставок. Вот как обеспечить надежный мониторинг на аукционных сайтах.
Где срабатывают CAPTCHA на аукционных сайтах
Действие
Тип капчи
Шаблон триггера
Поиск объявлений /browse
reCAPTCHA v2
Быстрый последовательный поиск
Посмотреть детали объявления
reCAPTCHA v2
Большой объем с одного IP
Проверить историю ставок
reCAPTCHA v2
Повторная загрузка страниц с подробными сведениями
Просмотр категорий
Cloudflare Turnstile
Скорость навигации, как у бота
Страницы с оповещениями о ценах
reCAPTCHA v2
Частые обновления
Мониторинг аукционов с помощью решения CAPTCHA
import requests
import time
import re
from datetime import datetime
class AuctionMonitor:
def __init__(self, api_key):
self.api_key = api_key
self.session = requests.Session()
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
def search_listings(self, auction_url, query, category=None):
"""Search auction listings, solving CAPTCHAs when triggered."""
params = {"q": query}
if category:
params["category"] = category
response = self.session.get(
f"{auction_url}/search", params=params
)
if self._has_captcha(response.text):
site_key = self._extract_site_key(response.text)
token = self._solve_recaptcha(site_key, f"{auction_url}/search")
response = self.session.post(
f"{auction_url}/search",
data={**params, "g-recaptcha-response": token}
)
return self._parse_listings(response.text)
def monitor_listing(self, auction_url, listing_id):
"""Get current bid and listing details."""
url = f"{auction_url}/item/{listing_id}"
response = self.session.get(url)
if self._has_captcha(response.text):
site_key = self._extract_site_key(response.text)
token = self._solve_recaptcha(site_key, url)
response = self.session.post(url, data={
"g-recaptcha-response": token
})
return self._parse_listing_detail(response.text)
def track_bids(self, auction_url, listing_ids, interval=60):
"""Track bid changes across multiple listings."""
history = {lid: [] for lid in listing_ids}
while True:
for listing_id in listing_ids:
try:
detail = self.monitor_listing(auction_url, listing_id)
previous = history[listing_id]
if previous and detail["current_bid"] != previous[-1]["current_bid"]:
print(f"Bid change on {listing_id}: "
f"${previous[-1]['current_bid']} → ${detail['current_bid']}")
history[listing_id].append(detail)
except Exception as e:
print(f"Error checking {listing_id}: {e}")
time.sleep(interval)
def _has_captcha(self, html):
return "g-recaptcha" in html or "recaptcha" in html.lower()
def _extract_site_key(self, html):
match = re.search(r'data-sitekey="([^"]+)"', html)
if match:
return match.group(1)
match = re.search(r"sitekey['\"]?\s*[:=]\s*['\"]([^'\"]+)", html)
if match:
return match.group(1)
raise ValueError("Could not find reCAPTCHA site key")
def _solve_recaptcha(self, site_key, page_url):
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": self.api_key,
"method": "userrecaptcha",
"googlekey": site_key,
"pageurl": page_url,
"json": 1
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(3)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": self.api_key,
"action": "get",
"id": task_id,
"json": 1
})
data = result.json()
if data["status"] == 1:
return data["request"]
raise TimeoutError("reCAPTCHA solve timed out")
def _parse_listings(self, html):
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
def text_or_none(node):
return node.text.strip() if node and node.text else None
def attr_or_none(node, attr):
return node.get(attr) if node else None
listings = []
for item in soup.select(".listing-item, .auction-item"):
listings.append({
"title": text_or_none(item.select_one(".title")),
"current_bid": text_or_none(item.select_one(".price, .bid")),
"time_left": text_or_none(item.select_one(".time-left")),
"url": attr_or_none(item.select_one("a"), "href")
})
return listings
def _parse_listing_detail(self, html):
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
def text_or_none(node):
return node.text.strip() if node and node.text else None
return {
"title": text_or_none(soup.select_one("h1, .item-title")),
"current_bid": text_or_none(soup.select_one(".current-bid, .price")),
"bid_count": text_or_none(soup.select_one(".bid-count")),
"time_left": text_or_none(soup.select_one(".time-remaining")),
"checked_at": datetime.now().isoformat()
}
# Usage
monitor = AuctionMonitor("YOUR_API_KEY")
listings = monitor.search_listings(
"https://auctions.example.com",
"vintage electronics",
category="collectibles"
)
CaptchaAI Quickstart: ваше первое решение CAPTCHA за 5 минут
Как решить reCAPTCHA v2 через API: пошаговое руководство
Как решить Cloudflare Turnstile через API
Как решить GeeTest v3 с помощью API
Какие у вас впечатления от этой статьи?
Комментарии для этой статьи отключены.
Похожие сообщения
Use Cases
Практическое руководство по мониторингу тарифов в стране с обработкой CAPTCHA, с реалистичными сценариями, советами по рабочему процессу и практическими шагами...
Практическое руководство по мониторингу тарифов в стране с обработкой CAPTCHA, с реалистичными сценариями, сов...
Apr 22, 2026
Tutorials
Пошаговое руководство по созданию панели анализа с использованием Captcha AI, с примерами, которые можно использовать повторно, и понятным рабочим процессом Cap...
Пошаговое руководство по созданию панели анализа с использованием Captcha AI, с примерами, которые можно испол...
Apr 29, 2026
Integrations
Руководство по интеграции Bright Data + Captcha AI: полное руководство по прокси-серверу для экспертов, с настройкой, примерами кода и понятным способом подключ...