تستخدم منصات التواصل الاجتماعي اختبارات CAPTCHA للحماية من جمع البيانات تلقائيًا. يحتاج باحثو السوق ومراقبو العلامات التجارية والباحثون الأكاديميون إلى التغلب على هذه التحديات لجمع البيانات الاجتماعية العامة لتحليلها.
اختبارات CAPTCHA عبر المنصات الاجتماعية
| منصة | نوع التحقق | عندما يتم تفعيلها | السياق |
|---|---|---|---|
| انستغرام | reCAPTCHA v2 | تسجيل الدخول والبحث والوصول إلى الملف الشخصي | الحد من المعدل |
| الفيسبوك | reCAPTCHA v2 | تسجيل الدخول، عمليات البحث المتكررة | نقطة تفتيش أمنية |
| تويتر/X | Cloudflare Turnstile | تسجيل الدخول، الوصول إلى API | منع البوت |
| تيك توك | reCAPTCHA v3 | مشاهدات الملف الشخصي، والبحث | جودة حركة المرور |
| ينكدين | Cloudflare Challenge | تجريف الملف الشخصي | كشف البوت |
| رديت | reCAPTCHA v2 | تسجيل الدخول، التصفح المكثف | منع إساءة الاستخدام |
مكشطة أبحاث وسائل التواصل الاجتماعي
import requests
import time
import re
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
def solve_captcha(method, sitekey, pageurl, **kwargs):
data = {
"key": CAPTCHAAI_KEY,
"method": method,
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
}
data.update(kwargs)
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data=data)
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
r = result.json()
if r["request"] != "CAPCHA_NOT_READY":
return r["request"]
raise TimeoutError("Solve timeout")
class SocialMediaResearcher:
def __init__(self, proxy=None):
self.session = requests.Session()
if proxy:
self.session.proxies = {"http": proxy, "https": proxy}
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) "
"AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 "
"Mobile/15E148 Safari/604.1",
"Accept-Language": "en-US,en;q=0.9",
})
def authenticate(self, login_url, credentials, sitekey):
"""Login with CAPTCHA handling."""
# Load login page
self.session.get(login_url)
# Solve CAPTCHA
token = solve_captcha("userrecaptcha", sitekey, login_url)
# Submit login
resp = self.session.post(login_url, data={
**credentials,
"g-recaptcha-response": token,
})
return resp.status_code == 200
def collect_profiles(self, profile_urls):
"""Collect public profile data with CAPTCHA handling."""
profiles = []
for url in profile_urls:
try:
resp = self.session.get(url, timeout=30)
# Handle CAPTCHA if triggered
if self._has_captcha(resp.text):
resp = self._handle_captcha(resp.text, url)
profiles.append({
"url": url,
"data": self._parse_profile(resp.text),
"status": "success",
})
time.sleep(5) # Slow down between profiles
except Exception as e:
profiles.append({
"url": url,
"error": str(e),
"status": "failed",
})
return profiles
def _has_captcha(self, html):
return any(tag in html.lower() for tag in [
'data-sitekey', 'g-recaptcha', 'cf-turnstile',
'challenge-platform', 'captcha',
])
def _handle_captcha(self, html, url):
match = re.search(r'data-sitekey="([^"]+)"', html)
if not match:
return self.session.get(url)
sitekey = match.group(1)
if 'cf-turnstile' in html:
token = solve_captcha("turnstile", sitekey, url)
return self.session.post(url, data={"cf-turnstile-response": token})
else:
token = solve_captcha("userrecaptcha", sitekey, url)
return self.session.post(url, data={"g-recaptcha-response": token})
def _parse_profile(self, html):
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
return {
"name": self._safe_text(soup, "h1, .profile-name"),
"bio": self._safe_text(soup, ".bio, .profile-bio"),
"followers": self._safe_text(soup, "[data-followers], .followers"),
"posts": self._safe_text(soup, "[data-posts], .posts-count"),
}
def _safe_text(self, soup, selector):
el = soup.select_one(selector)
return el.get_text(strip=True) if el else ""
الهاشتاج وأبحاث الاتجاه
def research_hashtag(hashtag, platform_url, pages=5):
"""Collect posts for a specific hashtag."""
researcher = SocialMediaResearcher(
proxy="http://user:pass@mobile.proxy.com:5000"
)
all_posts = []
for page in range(pages):
url = f"{platform_url}/explore/tags/{hashtag}?page={page}"
resp = researcher.session.get(url, timeout=30)
if researcher._has_captcha(resp.text):
resp = researcher._handle_captcha(resp.text, url)
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
posts = soup.select(".post-item, article")
for post in posts:
all_posts.append({
"text": post.get_text(strip=True)[:500],
"hashtag": hashtag,
"page": page,
})
time.sleep(5)
return all_posts
مراقبة إشارة العلامة التجارية
import json
from datetime import datetime
class BrandMonitor:
def __init__(self, brand_name, keywords, proxy=None):
self.brand = brand_name
self.keywords = keywords
self.researcher = SocialMediaResearcher(proxy=proxy)
def daily_scan(self, platform_urls):
"""Run daily brand mention scan across platforms."""
report = {
"brand": self.brand,
"date": datetime.now().isoformat(),
"platforms": {},
}
for name, url in platform_urls.items():
mentions = []
for keyword in self.keywords:
search_url = f"{url}/search?q={keyword}"
try:
resp = self.researcher.session.get(search_url, timeout=30)
if self.researcher._has_captcha(resp.text):
resp = self.researcher._handle_captcha(
resp.text, search_url,
)
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
results = soup.select(".search-result, .post")
mentions.append({
"keyword": keyword,
"count": len(results),
})
time.sleep(5)
except Exception as e:
mentions.append({
"keyword": keyword,
"error": str(e),
})
report["platforms"][name] = mentions
return report
# Usage
monitor = BrandMonitor(
brand_name="CaptchaAI",
keywords=["captchaai", "captcha ai", "captcha solver"],
proxy="http://user:pass@mobile.proxy.com:5000",
)
report = monitor.daily_scan({
"twitter": "https://twitter-alternative.example.com",
"reddit": "https://www.reddit.com",
})
print(json.dumps(report, indent=2))
توصيات الوكيل
| منصة | أفضل وكيل | لماذا |
|---|---|---|
| انستغرام | الجوال (4G) | يتوقع حركة مرور الأجهزة المحمولة |
| الفيسبوك | سكني | علامات DC IPs بقوة |
| تويتر/X | سكني | يقوم Cloudflare بحظر وحدات تحكم المجال DC |
| تيك توك | الجوال (4G) | مصممة للوصول المحمول |
| ينكدين | مزود خدمة الإنترنت السكنية | تتوقع عناوين IP لسطح المكتب/corporate |
| رديت | الدورية السكنية | حدود المعدل لكل IP |
إرشادات تحديد المعدل
| منصة | معدل الطلب الآمن | مدة الجلسة |
|---|---|---|
| انستغرام | 1 متطلب / 10 ثانية | الحد الأقصى 5 دقائق ثم الراحة |
| الفيسبوك | 1 مطلوب / 5 ثانية | ماكس 10 دقيقة |
| تويتر/X | 1 مطلوب / 3 ثانية | الحد الأقصى 15 دقيقة |
| تيك توك | 1 مطلوب / 5 ثانية | الحد الأقصى 5 دقائق |
| ينكدين | 1 متطلب / 10 ثانية | الحد الأقصى 5 دقائق |
| رديت | 1 متطلب / 2 ثانية | الحد الأقصى 30 دقيقة |
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| كابتشا كل طلب | تم وضع علامة IP | تدوير IP، واستخدام الوكيل المحمول |
| الحساب مغلق | إجراءات كثيرة جدًا | تقليل التردد، واستخدام حسابات متعددة |
| تم إرجاع صفحة فارغة | المحتوى وراء تسجيل الدخول | المصادقة أولا |
| حلقة التحدي Cloudflare | عدم تطابق بصمة المتصفح | استخدم متصفحًا يركز على الخصوصية أو Puppeteer الخفي |
| محتوى مختلف عن المتصفح | الموقع /cookie الاختلافات | مطابقة الوكيل الجغرافي للجمهور المستهدف |
الأسئلة الشائعة
هل يُسمح بتجريف وسائل التواصل الاجتماعي للبحث؟
يعد جمع البيانات العامة للأبحاث غير التجارية أمرًا شائعًا. قضت المحاكم بأن حذف البيانات العامة لا ينتهك قانون CFAA. ومع ذلك، احترم دائمًا شروط الخدمة وحدود أسعار النظام الأساسي.
لماذا تقوم منصات التواصل الاجتماعي بإجراء اختبار CAPTCHA بهذه السرعة؟
تستثمر المنصات الاجتماعية بكثافة في الكشف عن الروبوتات. يقومون بتحليل أنماط التصفح وطلب التردد وبصمات أصابع الجهاز. استخدم وكلاء الهاتف المحمول وأنماط التصفح الواقعية.
هل يجب علي استخدام واجهة برمجة التطبيقات (API) بدلاً من الكشط؟
إذا كان النظام الأساسي يوفر واجهة برمجة التطبيقات (API) بالبيانات التي تحتاجها، ففضل ذلك. تعتبر واجهات برمجة التطبيقات أكثر موثوقية ومتوافقة مع ToS. استخدم الكشط + CaptchaAI فقط للبيانات غير المتوفرة من خلال واجهات برمجة التطبيقات الرسمية.
أدلة ذات صلة
- وكلاء الهاتف المحمول لحل اختبار CAPTCHA: شرح معدلات النجاح الأعلى
- استمرارية جلسة المتصفح لسير عمل اختبار CAPTCHA
- جمع بيانات أبحاث وسائل التواصل الاجتماعي بشكل موثوق -احصل على مفتاح CaptchaAI الخاص بكوالتعامل مع اختبارات CAPTCHA الخاصة بالمنصة تلقائيًا.*