Integrations

عزل ملف تعريف المتصفح + تكامل CaptchaAI

يُعنى هذا الدليل بسيناريوهات الاختبار والتشغيل الآلي المملوكة والمصرح بها، حيث تحتاج الفرق إلى اتساق الجلسات بين البيئات أو إدارة حسابات متعددة مملوكة في وقت واحد.

تعمل أدوات عزل ملف تعريف المتصفح على إنشاء بيئات متصفح متميزة بإعدادات مستقلة لكل جلسة. بالاشتراك مع CaptchaAI، يحصل كل ملف تعريف على حل CAPTCHA موثوق به داخل نفس سياق الجلسة الذي يجري اختباره.


كيف يساعد عزل ملف تعريف المتصفح في بيئات الاختبار

ميزة Chrome عادي متصفح مع ملف تعريف معزول
بصمة الجلسة متشابكة بين الجلسات فريدة لكل ملف تعريف
عزل ملفات تعريف الارتباط مشتركة افتراضيًا منفصلة لكل ملف تعريف
مخاطر التداخل بين الجلسات عالية منخفض

تسجيل الدخول المتعدد + CaptchaAI

ابدأ ملفًا شخصيًا عبر واجهة برمجة التطبيقات (API).

import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

MULTILOGIN_TOKEN = "your_multilogin_token"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def start_multilogin_profile(profile_id):
    """Start a Multilogin browser profile and return WebDriver."""
    # Start profile via Multilogin API
    resp = requests.get(
        f"http://127.0.0.1:35000/api/v1/profile/start"
        f"?automation=true&profileId={profile_id}",
        headers={"Authorization": f"Bearer {MULTILOGIN_TOKEN}"},
    )

    data = resp.json()
    port = data["value"]

    # Connect Selenium to the running profile
    options = webdriver.ChromeOptions()
    options.debugger_address = f"127.0.0.1:{port}"

    driver = webdriver.Chrome(options=options)
    return driver


def solve_recaptcha(site_url, sitekey):
    """Solve via CaptchaAI API."""
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        })
        data = resp.json()
        if data["request"] == "CAPCHA_NOT_READY":
            continue
        if data["status"] == 1:
            return data["request"]

    raise TimeoutError("Solve timeout")


def run_with_multilogin(profile_id, target_url):
    driver = start_multilogin_profile(profile_id)

    try:
        driver.get(target_url)
        time.sleep(3)

        # Detect sitekey
        sitekey = driver.execute_script(
            "return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
        )

        if sitekey:
            # Solve CAPTCHA
            token = solve_recaptcha(target_url, sitekey)

            # Inject token
            driver.execute_script(f"""
                document.querySelector('#g-recaptcha-response').value = '{token}';
                document.querySelectorAll('[name="g-recaptcha-response"]')
                    .forEach(el => {{ el.value = '{token}'; }});
            """)

            # Submit form
            driver.find_element(By.CSS_SELECTOR, "form").submit()
            time.sleep(3)

        return driver.page_source

    finally:
        driver.quit()


# Run across multiple profiles
profile_ids = [
    "profile-uuid-1",
    "profile-uuid-2",
    "profile-uuid-3",
]

for pid in profile_ids:
    result = run_with_multilogin(pid, "https://target-site.com/form")
    print(f"Profile {pid}: done")

تسجيل الدخول + CaptchaAI

إدارة الملف الشخصي

import requests
import time
import subprocess
from selenium import webdriver


GOLOGIN_TOKEN = "your_gologin_token"
GOLOGIN_API = "https://api.gologin.com/browser"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def create_gologin_profile():
    """Create a new GoLogin profile with controlled browser settings."""
    resp = requests.post(
        GOLOGIN_API,
        headers={"Authorization": f"Bearer {GOLOGIN_TOKEN}"},
        json={
            "name": f"captcha-profile-{int(time.time())}",
            "os": "win",
            "navigator": {
                "userAgent": "random",
                "resolution": "1920x1080",
                "language": "en-US",
            },
            "proxy": {
                "mode": "none",
            },
        },
    )
    return resp.json()["id"]


def start_gologin_profile(profile_id):
    """Start GoLogin profile and connect WebDriver."""
    resp = requests.get(
        f"{GOLOGIN_API}/{profile_id}/start",
        headers={"Authorization": f"Bearer {GOLOGIN_TOKEN}"},
    )

    data = resp.json()
    debug_port = data.get("debugPort", 0)
    ws_url = data.get("wsUrl", "")

    options = webdriver.ChromeOptions()
    options.debugger_address = f"127.0.0.1:{debug_port}"

    driver = webdriver.Chrome(options=options)
    return driver


def stop_gologin_profile(profile_id):
    requests.get(
        f"{GOLOGIN_API}/{profile_id}/stop",
        headers={"Authorization": f"Bearer {GOLOGIN_TOKEN}"},
    )


def solve_and_submit(driver, url):
    """Navigate, solve CAPTCHA, submit form."""
    driver.get(url)
    time.sleep(3)

    sitekey = driver.execute_script(
        "return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
    )

    if not sitekey:
        return {"status": "no_captcha"}

    # Solve via CaptchaAI
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            break

    token = data["request"]

    driver.execute_script(f"""
        document.querySelector('#g-recaptcha-response').value = '{token}';
    """)

    return {"status": "solved", "token": token[:30] + "..."}


# Full pipeline
profile_id = create_gologin_profile()
driver = start_gologin_profile(profile_id)

try:
    result = solve_and_submit(driver, "https://target-site.com/register")
    print(result)
finally:
    driver.quit()
    stop_gologin_profile(profile_id)

دولفين انتي + CaptchaAI

import requests
import time
from selenium import webdriver

DOLPHIN_API = "http://localhost:3001/v1.0"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def start_dolphin_profile(profile_id):
    """Start a Dolphin Anty profile."""
    resp = requests.get(
        f"{DOLPHIN_API}/browser_profiles/{profile_id}/start"
        f"?automation=1"
    )
    data = resp.json()

    port = data["automation"]["port"]
    options = webdriver.ChromeOptions()
    options.debugger_address = f"127.0.0.1:{port}"

    return webdriver.Chrome(options=options)


def stop_dolphin_profile(profile_id):
    requests.get(f"{DOLPHIN_API}/browser_profiles/{profile_id}/stop")


def captcha_workflow(driver, url, captchaai_key):
    driver.get(url)
    time.sleep(3)

    sitekey = driver.execute_script(
        "return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
    )
    if not sitekey:
        return None

    # Submit to CaptchaAI
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": captchaai_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    # Poll
    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": captchaai_key, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            break

    token = data["request"]
    driver.execute_script(f"""
        document.querySelector('#g-recaptcha-response').value = '{token}';
    """)
    return token

تنفيذ سيناريوهات QA متعددة في الوقت نفسه

from concurrent.futures import ThreadPoolExecutor, as_completed


def process_profile(profile_config):
    """Run a task on one privacy-focused browser profile."""
    browser = profile_config["browser"]  # "multilogin", "gologin", "dolphin"
    profile_id = profile_config["profile_id"]
    url = profile_config["url"]

    driver = None
    try:
        if browser == "multilogin":
            driver = start_multilogin_profile(profile_id)
        elif browser == "gologin":
            driver = start_gologin_profile(profile_id)
        elif browser == "dolphin":
            driver = start_dolphin_profile(profile_id)

        result = solve_and_submit(driver, url)
        return {"profile": profile_id, **result}

    except Exception as e:
        return {"profile": profile_id, "status": "error", "error": str(e)}

    finally:
        if driver:
            driver.quit()
        if browser == "gologin":
            stop_gologin_profile(profile_id)
        elif browser == "dolphin":
            stop_dolphin_profile(profile_id)


# Run 3 QA profiles in parallel
profiles = [
    {"browser": "gologin", "profile_id": f"profile-{i}", "url": "https://target.com/form"}
    for i in range(3)
]

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = {executor.submit(process_profile, p): p for p in profiles}

    for future in as_completed(futures):
        result = future.result()
        print(f"[{result['status']}] Profile: {result['profile']}")

أفضل الممارسات

ممارسة لماذا
ملف تعريف واحد لكل سيناريو QA يمنع تداخل جلسات الاختبار
فصل الشبكة حسب السيناريو عند الحاجة يحافظ على اتساق السجلات بين البيئات
تحميل صفحات المساعدة أو الصحة المملوكة أولًا يثبت أن التطبيق يستجيب قبل اختبار النموذج
مهلة تهيئة قصيرة قبل الإرسال تمنع تفسير أعطال التحميل كفشل CAPTCHA
ملفات تعريف الارتباط النظيفة بين عمليات التشغيل الاختبارية تساعد على إعادة إنتاج المشكلة بدقة

استكشاف الأخطاء وإصلاحها

المشكلة السبب الإجراء
لن يبدأ الملف الشخصي صراع الميناء تحقق من عدم وجود ملف تعريف آخر باستخدام نفس المنفذ
يتعذر على WebDriver الاتصال منفذ تصحيح خاطئ التحقق من استجابة API للمنفذ الصحيح
لا يزال يتم تشغيل اختبار CAPTCHA عدم تنسق بيئة التشغيل طابق بين إعدادات الجلسة واللغة والمنطقة الزمنية الخاصة ببيئة الاختبار
تم رفض الرمز المميز لم يكتمل تحميل عناصر الصفحة أو انتهت الجلسة راجع زمن التحميل وسلامة الجلسة قبل الإرسال
بطء إنشاء الملف الشخصي حد معدل API أضف تأخيرات بين مكالمات إنشاء الملف الشخصي

الأسئلة الشائعة

ما هو المتصفح الذي يركز على الخصوصية والذي يعمل بشكل أفضل مع CaptchaAI؟

تعمل البرامج الثلاثة (Multilogin، وGoLogin، وDolphin Anty) بشكل جيد. CaptchaAI لا يعتمد على المتصفح، فهو يحتاج فقط إلى مفتاح الموقع وعنوان URL للصفحة.

هل أحتاج إلى فصل شبكي مع هذه المتصفحات؟

يعتمد ذلك على بنية بيئة الاختبار لديك. إذا كانت السيناريوهات المختلفة تمر عبر شبكات أو مناطق منفصلة في التطبيق المملوك، فاحرص على إبقاء هذا الفصل واضحًا في سجلاتك.

كم عدد الملفات الشخصية التي يمكنني تشغيلها في وقت واحد؟

يعتمد ذلك على موارد النظام وعلى عدد سيناريوهات QA التي تحتاج إلى تشغيلها في اللحظة نفسها. ابدأ بعدد صغير، ثم زد الحمل تدريجيًا مع مراقبة الذاكرة وزمن الاستجابة.

هل يمكنني إعادة استخدام الملفات الشخصية عبر الجلسات؟

نعم، إذا كان هدفك هو إعادة إنتاج حالة جلسة معروفة داخل تطبيق تملكه. احتفظ بسجل واضح يحدد متى أُنشئ الملف الشخصي ومتى أُعيد استخدامه حتى يسهل تفسير النتائج.


أدلة ذات صلة


إذا كنت تختبر ملفات تعريف متصفح معزولة داخل بيئة تملكها، فابدأ بتثبيت إعدادات الجلسة وسجلات المتصفح، ثم أدخل CaptchaAI في نفس المسار وضمن نفس السيناريو.

التعليقات غير مفعّلة لهذا المقال.

مقالات ذات صلة

Reference استمرارية جلسة المتصفح لسير عمل اختبار CAPTCHA
دليل عملي حول استمرارية جلسة المتصفح لسير عمل اختبار CAPTCHA يجمع أمثلة واضحة ونقاطًا تشغيلية مفيدة لبناء سير عمل أكثر ثباتًا مع Captcha AI.

دليل عملي حول استمرارية جلسة المتصفح لسير عمل اختبار CAPTCHA يجمع أمثلة واضحة ونقاطًا تشغيلية مفيدة لبناء سير...

Apr 28, 2026
API Tutorials Bash + cURL + CaptchaAI: أتمتة CAPTCHA من سطر الأوامر
شرح خطوة بخطوة لـ Bash + c URL + Captcha AI: أتمتة CAPTCHA من سطر الأوامر مع أمثلة مباشرة قابلة لإعادة الاستخدام ومسار واضح لتطبيقه باستخدام Captcha AI.

شرح خطوة بخطوة لـ Bash + c URL + Captcha AI: أتمتة CAPTCHA من سطر الأوامر مع أمثلة مباشرة قابلة لإعادة الاستخد...

Apr 21, 2026
Troubleshooting فشل اختبار CAPTCHA لأتمتة المتصفح ولكن واجهة برمجة التطبيقات تعمل: دليل التصحيح
دليل عملي حول فشل اختبار CAPTCHA لأتمتة المتصفح ولكن واجهة برمجة التطبيقات تعمل: دليل التصحيح يركّز على الأسباب الشائعة وخطوات التشخيص والإصلاحات الأكثر فائدة د...

دليل عملي حول فشل اختبار CAPTCHA لأتمتة المتصفح ولكن واجهة برمجة التطبيقات تعمل: دليل التصحيح يركّز على الأسبا...

Apr 27, 2026