Skip to content

빠른 시작: Mbbrowser 환경 제어하기

이 장에서는 즉시 복사해서 실행할 수 있는 Python 스크립트를 제공합니다. 이를 통해 처음부터 Mbbrowser 핑거프린트 환경의 제어권을 가져오고 첫 번째 자동화 작업을 완료하는 과정을 안내합니다.


전체 스크립트 (복사해서 사용)

start_selenium.py라는 파일을 만들고 다음 코드를 붙여넣은 뒤, 설정 섹션을 수정하십시오.

python
import requests
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

# ============================
# 설정 섹션: 본인의 정보로 수정하세요
# ============================
API_URL    = "http://127.0.0.1:8186"
SESSION_ID = "사용자_환경_ID_입력"        # Mbbrowser에서 환경 우클릭 → 환경 ID 복사로 획득
# Mbbrowser 디렉토리 내의 chromedriver.exe 경로 (또는 Selenium Manager 자동 매칭을 위해 None으로 설정 가능)
DRIVER_PATH = r"C:\Program Files (x86)\Mbbrowser_v7.10.20.219\chromedriver.exe"


def start_browser():
    """
    1단계: Mbbrowser ApiServer에 특정 환경을 열도록 요청합니다.
    2단계: 반환값에서 debuggerAddress를 가져옵니다.
    3단계: Selenium을 사용하여 해당 환경의 제어권을 가져옵니다.
    4단계: 비즈니스 로직을 실행합니다.
    """

    # ── 1단계: Mbbrowser 환경 열기 ──────────────────────────────────
    print("⏳ Mbbrowser 핑거프린트 환경 시작 중...")
    try:
        response = requests.post(
            f"{API_URL}/api/v1/browser/start",
            json={"Session_ID": SESSION_ID},
            timeout=30
        )
        data = response.json()
    except requests.exceptions.ConnectionError:
        print("❌ ApiServer에 연결할 수 없습니다. 시작되었는지와 포트가 맞는지 확인하세요!")
        return

    if data.get("code") != 0:
        print(f"❌ 환경 시작 실패: {data.get('message')}")
        return

    # ── 2단계: 원격 디버깅 주소 추출 ────────────────────────────────
    # data["data"]["http"] 형식: 127.0.0.1:9222
    debugger_address = data["data"]["http"]
    print(f"✅ 환경이 시작되었습니다. 원격 디버깅 주소: {debugger_address}")

    # ── 3단계: Selenium 제어 설정 ───────────────────────────────────
    chrome_options = Options()
    # 새 브라우저를 만드는 대신 기존 브라우저를 인수하는 핵심 설정입니다!
    chrome_options.add_experimental_option("debuggerAddress", debugger_address)

    # Mbbrowser에 포함된 chromedriver가 있다면 그 경로를 지정하고,
    # 그렇지 않다면 None으로 설정하여 Selenium Manager가 자동으로 처리하게 합니다.
    if DRIVER_PATH:
        service = Service(executable_path=DRIVER_PATH)
        driver = webdriver.Chrome(service=service, options=chrome_options)
    else:
        driver = webdriver.Chrome(options=chrome_options)

    print("🎉 Selenium 제어 성공!")

    # ── 4단계: 비즈니스 로직 실행 ───────────────────────────────────
    try:
        # 대상 URL로 이동
        driver.get("https://www.mbbrowser.com")
        print(f"📄 현재 페이지 타이틀: {driver.title}")

        # 관찰을 위해 3초 대기
        time.sleep(3)

        print("✅ 스크립트 실행 완료!")
    finally:
        # 중요: 이는 "Selenium 연결"만 끊는 것입니다.
        # Mbbrowser 환경 창은 계속 실행 상태로 유지됩니다.
        # 브라우저를 완전히 닫으려면 /api/v1/browser/stop API를 호출하세요.
        driver.quit()


if __name__ == "__main__":
    start_browser()

스크립트 실행:

bash
python start_selenium.py

예상 출력 결과

⏳ Mbbrowser 핑거프린트 환경 시작 중...
✅ 환경이 시작되었습니다. 원격 디버깅 주소: 127.0.0.1:9222
🎉 Selenium 제어 성공!
📄 현재 페이지 타이틀: MBBrowser 안티 디텍션 브라우저 - 다계정 솔루션
✅ 스크립트 실행 완료!

코드 분석

1. ApiServer를 호출하여 환경 시작

python
response = requests.post(
    f"{API_URL}/api/v1/browser/start",
    json={"Session_ID": SESSION_ID}
)
  • 이 단계는 Mbbrowser에 "Session_ID가 XXX인 핑거프린트 환경을 열어줘"라고 요청하는 것입니다.
  • 요청을 받으면 ApiServer는 해당 크롬 인스턴스를 시작하고 원격 디버깅 포트를 엽니다.

2. debuggerAddress 추출

python
debugger_address = data["data"]["http"]  # 예: 127.0.0.1:9222
  • http 필드의 정보는 크롬의 원격 디버깅 포트 주소(보통 127.0.0.1:포트번호)입니다.
  • 각 Mbbrowser 환경은 고유한 포트 번호를 자동으로 배정받으므로, 여러 환경을 동시에 실행해도 충돌이 발생하지 않습니다.

3. debuggerAddress를 설정하여 제어권 획득 (가장 중요한 단계!)

python
chrome_options.add_experimental_option("debuggerAddress", debugger_address)
driver = webdriver.Chrome(options=chrome_options)

이것이 Mbbrowser Selenium 자동화와 일반 Selenium의 결정적인 차이점입니다.

동작일반 SeleniumMbbrowser Selenium
드라이버 생성비어 있는 새 크롬 창을 시작함제어 포트에 접속하여 기존 Mbbrowser 브라우저를 인수함
핑거프린트없음 (기본 상태)완벽한 핑거프린트 적용 (UA, Canvas, WebGL, IP 등)
쿠키 상태비어 있음 (재로그인 필요)기존 로그인 상태 유지 (로그인 기록이 있는 경우)

4. 실행 후 처리

python
driver.quit()  # Selenium 제어 연결을 끊음 (Mbbrowser 창은 유지됨)

NOTE

driver.quit()은 브라우저와 Selenium 사이의 제어 통로만 닫을 뿐, Mbbrowser 창 자체를 닫지는 않습니다.

브라우저를 완전히 종료하려면 다음을 호출해야 합니다:

python
requests.post(f"{API_URL}/api/v1/browser/stop", json={"Session_ID": SESSION_ID})

문제 해결 (Troubleshooting)

❓ 오류: Cannot connect to the Service

원인: chromedriver.exe 버전이 Mbbrowser 커널 버전과 맞지 않습니다.

해결 방법:

  1. Mbbrowser 디렉토리에 포함된 chromedriver.exe를 사용하고 Service에서 그 경로를 지정하십시오.
  2. 혹은 DRIVER_PATH 설정을 제거(None으로 설정)하여 Selenium Manager가 자동으로 해결하게 하십시오.

❓ 오류: ConnectionError: Cannot connect to ApiServer

원인: ApiServer가 실행 중이 아니거나 포트가 점유되었습니다.

해결 방법:

  1. ApiServer 터미널 창이 계속 켜져 있는지 확인하십시오.
  2. API_URL의 포트가 --port 매개변수와 일치하는지 확인하십시오.
  3. 방화벽이 8186 포트를 차단하고 있는지 확인하십시오.

❓ 오류: code != 0: 환경 시작 실패

원인: Session_ID가 틀렸거나 해당 환경이 이미 실행 중입니다.

해결 방법:

  1. Mbbrowser에서 정확한 Session_ID를 복사했는지 확인하십시오.
  2. 환경이 이미 켜져 있다면, 정지 Interface를 호출한 후 다시 시도해 보십시오.

❓ 브라우저는 열리는데 로그인 상태가 아닙니다.

원인: 해당 환경을 처음 열었거나 로그인을 한 적이 없어 쿠키가 비어 있는 상태입니다.

해결 방법: 이는 정상입니다. 다음으로 핵심 API 레퍼런스를 읽고 쿠키를 주입하거나 로그인을 자동화하는 방법을 배우십시오.


TIP

스크립트가 잘 작동하나요? 다음 장 핵심 API 레퍼런스에서는 요소 찾기, 입력, 클릭, 대기, 스크린샷 등 Selenium을 이용한 더욱 복잡한 조작법을 배우게 됩니다.