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 requestsQuick 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/createendpoint to create browser environment browserName- Give the environment a name for easy identificationproxy- 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/startendpoint 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 starteddebug_port- Debug port returned from APIws_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') # ScreenshotExplanation:
- 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
| Method | Code | Description |
|---|---|---|
| ChromiumOptions | ChromiumPage(ChromiumOptions().set_local_port(port)) | Most flexible, can set more options |
| Port Number | Chromium(34721) | Most concise |
| Address:Port | Chromium('127.0.0.1:34721') | Supports remote connection |
| WebSocket | Chromium('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)