Skip to content

Using DrissionPage to Control TgeBrowser for Automation

中文文档: /automation

Introduction

TgeBrowser provides API interfaces to launch browsers, which can be used with DrissionPage for automation control.

Use Cases: Batch operations, data collection, automated testing


Install Dependencies

bash
pip install DrissionPage requests

Quick Start

Complete Example Code

python
import requests
import time
from DrissionPage import ChromiumPage, ChromiumOptions

# ========== Configuration ==========
API_BASE_URL = "http://127.0.0.1:50326"
API_KEY = "your_api_key_here"  # Get from TgeBrowser client

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# ========== Step 1: Create Browser Environment ==========
print("1. Creating browser environment...")
response = requests.post(
    f"{API_BASE_URL}/api/browser/create",
    json={
        "browserName": "Automation Test",  # Environment name
        "proxy": {
            "protocol": "socks5",
            "host": "proxy.example.com",
            "port": 8888,
            "username": "username",
            "password": "password",
        },
        "fingerprint": {
          "os": "Windows",
          "platformVersion": 11,
          "kernel": "135",
          "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.9.2537 Safari/537.36",
          "canvas": True,
          "speechVoices": True,
          "clientRects": True,
          "fonts": ["Arial", "Courier New"],
          "disableTLS": [],
          "resolution": "1920x1080",
          "ram": 8,
          "cpu": 4,
          "language": "en-US",
           "languageBaseIp": True,
          "timezone": "Europe/Amsterdam",
          "timezoneBaseIp": True,
          "hardwareAcceleration": True,
          "disableSandbox": False,
          "startupParams": "",
          "deviceName": "DESKTOP-ABCD",
          "portScanProtection": ""
        },
        "startInfo": {
          "startPage": {
            "mode": "custom",
            "value": [
                "https://www.baidu.com"
            ]
          },
          "otherConfig": {
            "openConfigPage": False,
            "checkPage": True,
            "extensionTab": True
          }
        }
    },
    headers=headers
)

env_id = response.json()["data"]["envId"]
print(f"   Environment created successfully, ID: {env_id}")

# ========== Step 2: Start Browser ==========
print("2. Starting browser...")
response = requests.post(
    f"{API_BASE_URL}/api/browser/start",
    json={"envId": env_id},
    headers=headers
)

debug_port = response.json()["data"]["port"]
print(f"   Browser started, debug port: {debug_port}")

# ========== Step 3: Connect DrissionPage ==========
print("3. Connecting DrissionPage...")
time.sleep(3)  # Wait for browser to fully start

# Method 1: Connect via port (recommended)
co = ChromiumOptions().set_local_port(debug_port)
page = ChromiumPage(addr_or_opts=co)

# Method 2: Direct port number
# from DrissionPage import Chromium
# page = Chromium(debug_port)

# Method 3: Use address:port
# page = Chromium(f'127.0.0.1:{debug_port}')

# Method 4: Use WebSocket URL (need to get ws_url first)
# ws_url = response.json()["data"]["ws"]
# page = Chromium(ws_url)

print("   DrissionPage connected successfully")

# ========== Step 4: Perform Automation Operations ==========
print("4. Performing automation operations...")

# Visit webpage
page.get('https://www.example.com')
print(f"   Current page: {page.title}")

# More operation examples
page.get_screenshot('screenshot.png')  # Screenshot
print("   Screenshot saved")

print("\nComplete!")

Code Explanation

Step 1: Create Browser Environment

python
response = requests.post(
    f"{API_BASE_URL}/api/browser/create",
    json={
        "browserName": "Automation Test",  # Environment name
        "proxy": {
            "protocol": "socks5",
            "host": "proxy.example.com",
            "port": 8888,
            "username": "username",
            "password": "password",
        },
        "fingerprint": {
          "os": "Windows",
          "platformVersion": 11,
          "kernel": "135",
          "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.9.2537 Safari/537.36",
          "canvas": True,
          "speechVoices": True,
          "clientRects": True,
          "fonts": ["Arial", "Courier New"],
          "disableTLS": [],
          "resolution": "1920x1080",
          "ram": 8,
          "cpu": 4,
          "language": "en-US",
           "languageBaseIp": True,
          "timezone": "Europe/Amsterdam",
          "timezoneBaseIp": True,
          "hardwareAcceleration": True,
          "disableSandbox": False,
          "startupParams": "",
          "deviceName": "DESKTOP-ABCD",
          "portScanProtection": ""
        },
        "startInfo": {
          "startPage": {
            "mode": "custom",
            "value": [
                "https://www.baidu.com"
            ]
          },
          "otherConfig": {
            "openConfigPage": False,
            "checkPage": True,
            "extensionTab": True
          }
        }
    },
    headers=headers
)
env_id = response.json()["data"]["envId"]

Explanation:

  • Call /api/browser/create endpoint to create browser environment
  • browserName - Give the environment a name for easy identification
  • proxy - Proxy configuration
  • Returns envId - Environment ID, needed for subsequent operations

Step 2: Start Browser

python
response = requests.post(
    f"{API_BASE_URL}/api/browser/start",
    json={"envId": env_id},
    headers=headers
)
debug_port = response.json()["data"]["port"]

Explanation:

  • Call /api/browser/start endpoint to start browser
  • Pass the created envId
  • Returns port - Debug port, DrissionPage needs this port to connect

Step 3: Connect DrissionPage (Multiple Methods)

Method 1: Using ChromiumOptions (Recommended)

python
from DrissionPage import ChromiumPage, ChromiumOptions

time.sleep(3)  # Wait for browser to fully start
co = ChromiumOptions().set_local_port(debug_port)
page = ChromiumPage(addr_or_opts=co)

Method 2: Direct Port Number

python
from DrissionPage import Chromium

time.sleep(3)
page = Chromium(debug_port)

Method 3: Use Address:Port

python
from DrissionPage import Chromium

time.sleep(3)
page = Chromium(f'127.0.0.1:{debug_port}')

Method 4: Use WebSocket URL

python
from DrissionPage import Chromium

# First get WebSocket URL
ws_url = response.json()["data"]["ws"]

time.sleep(3)
page = Chromium(ws_url)

Explanation:

  • time.sleep(3) - Wait 3 seconds to ensure browser is fully started
  • debug_port - Debug port returned from API
  • ws_url - WebSocket connection address returned from API
  • All methods have the same effect, choose the most suitable one

Step 4: Use DrissionPage Operations

python
page.get('https://www.example.com')  # Visit webpage
page.title  # Get page title
page.get_screenshot('screenshot.png')  # Screenshot

Explanation:

  • Now you can use all DrissionPage features for automation

Multiple Ways to Connect Browser

TgeBrowser API returns browser information containing multiple connection methods, you can choose as needed:

python
# API returned data
{
  "success": true,
  "data": {
    "envId": 900,
    "browserName": "Test Environment",
    "port": 34721,           # Debug port
    "ws": "ws://127.0.0.1:34721/devtools/browser/xxx",  # WebSocket URL
    "http": "http://127.0.0.1:34721/json/version",
    "pid": 32512
  }
}

Method Comparison

MethodCodeDescription
ChromiumOptionsChromiumPage(ChromiumOptions().set_local_port(port))Most flexible, can set more options
Port NumberChromium(34721)Most concise
Address:PortChromium('127.0.0.1:34721')Supports remote connection
WebSocketChromium('ws://127.0.0.1:34721/devtools/browser/xxx')Direct use of complete address

Complete Example

python
import requests
import time
from DrissionPage import Chromium, ChromiumPage, ChromiumOptions

API_BASE_URL = "http://127.0.0.1:50326"
API_KEY = "your_api_key"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# Create and start browser
response = requests.post(
    f"{API_BASE_URL}/api/browser/create",
    json={"browserName": "Connection Test", "proxy": {"protocol": "direct"}},
    headers=headers
)
env_id = response.json()["data"]["envId"]

response = requests.post(
    f"{API_BASE_URL}/api/browser/start",
    json={"envId": env_id},
    headers=headers
)

# Get connection information
data = response.json()["data"]
port = data["port"]
ws_url = data["ws"]

print(f"Debug port: {port}")
print(f"WebSocket: {ws_url}")

time.sleep(3)

# ========== Method 1: ChromiumOptions ==========
co = ChromiumOptions().set_local_port(port)
page1 = ChromiumPage(addr_or_opts=co)
print(f"Method 1 connected successfully: {page1.title}")

# ========== Method 2: Port Number ==========
page2 = Chromium(port)
print(f"Method 2 connected successfully: {page2.title}")

# ========== Method 3: Address:Port ==========
page3 = Chromium(f'127.0.0.1:{port}')
print(f"Method 3 connected successfully: {page3.title}")

# ========== Method 4: WebSocket URL ==========
page4 = Chromium(ws_url)
print(f"Method 4 connected successfully: {page4.title}")

# All methods work normally
page1.get('https://www.baidu.com')

Selection Recommendations

  • Development/Debugging → Use Method 2 (most concise): Chromium(port)
  • Need Configuration → Use Method 1: ChromiumOptions() can set more options
  • Remote Connection → Use Method 3: Supports specifying IP address
  • Already Have URL → Use Method 4: Direct use of complete WebSocket address

Common DrissionPage Operations

Page Operations

python
# Visit webpage
page.get('https://www.example.com')

# Get page information
title = page.title
url = page.url

# Screenshot
page.get_screenshot('screenshot.png')

# Execute JavaScript
result = page.run_js('return document.title')

# Refresh
page.refresh()

Element Location

python
# By ID
element = page.ele('#username')

# By Class
element = page.ele('.button')

# By Text
element = page.ele('text:Login')

# By Attribute
element = page.ele('@name=email')

# Get multiple elements
elements = page.eles('tag:li')

Element Operations

python
# Input text
page.ele('#username').input('user123')

# Click
page.ele('#login-btn').click()

# Get text
text = page.ele('.title').text

# Get attribute
href = page.ele('tag:a').attr('href')

Waiting

python
# Wait for element to appear
page.wait.ele_displayed('#result', timeout=10)

# Wait for page to load
page.wait.doc_loaded()

# Fixed wait
page.wait(3)

References