Advanced Configuration - JinsongRoh/pydoll-mcp GitHub Wiki
โ๏ธ ๊ณ ๊ธ ์ค์ - ์ฑ๋ฅ ์ต์ ํ ๋ฐ ์คํ ์ค ์ค์
PyDoll MCP Server๋ ๋ค์ํ ๊ณ ๊ธ ์ค์ ์ ํตํด ์ฑ๋ฅ ์ต์ ํ์ ์คํ ์ค ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ํ์ด์ง์์๋ ์ ๋ฌธ์ ์ธ ๋ธ๋ผ์ฐ์ ์๋ํ๋ฅผ ์ํ ๊ณ ๊ธ ์ค์ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
๐ ๋ชฉ์ฐจ
- [ํ๊ฒฝ ๋ณ์ ์ค์ ](#ํ๊ฒฝ-๋ณ์-์ค์ )
- [๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ต์ ํ](#๋ธ๋ผ์ฐ์ -์ฑ๋ฅ-์ต์ ํ)
- [์คํ ์ค ๋ชจ๋ ์ค์ ](#์คํ ์ค-๋ชจ๋-์ค์ )
- [๋คํธ์ํฌ ์ต์ ํ](#๋คํธ์ํฌ-์ต์ ํ)
- [์บก์ฐจ ์ฐํ ์ค์ ](#์บก์ฐจ-์ฐํ-์ค์ )
- [๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ](#๋ฉ๋ชจ๋ฆฌ-๋ฐ-๋ฆฌ์์ค-๊ด๋ฆฌ)
- [๋๋ฒ๊น ๋ฐ ๋ก๊น ](#๋๋ฒ๊น -๋ฐ-๋ก๊น )
- [๋ณด์ ๋ฐ ๊ฐ์ธ์ ๋ณด ๋ณดํธ](#๋ณด์-๋ฐ-๊ฐ์ธ์ ๋ณด-๋ณดํธ)
๐ง ํ๊ฒฝ ๋ณ์ ์ค์
๊ธฐ๋ณธ ํ๊ฒฝ ๋ณ์
Claude Desktop ์ค์ ์์ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ์๋ฒ ๋์์ ์ ์ดํ ์ ์์ต๋๋ค:
{
"mcpServers": {
"pydoll": {
"command": "python",
"args": ["-m", "pydoll_mcp.server"],
"env": {
"PYDOLL_LOG_LEVEL": "INFO",
"PYDOLL_DEBUG": "false",
"PYDOLL_HEADLESS": "true",
"PYDOLL_STEALTH_MODE": "true",
"PYDOLL_CAPTCHA_BYPASS": "true",
"PYTHONIOENCODING": "utf-8"
}
}
}
}
๊ณ ๊ธ ํ๊ฒฝ ๋ณ์
๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ํ ๊ณ ๊ธ ํ๊ฒฝ ๋ณ์:
{
"env": {
"PYDOLL_MAX_BROWSERS": "3",
"PYDOLL_MAX_TABS_PER_BROWSER": "5",
"PYDOLL_TIMEOUT_DEFAULT": "30",
"PYDOLL_RETRY_ATTEMPTS": "3",
"PYDOLL_CACHE_ENABLED": "true",
"PYDOLL_PERFORMANCE_MODE": "optimized",
"PYDOLL_MEMORY_LIMIT": "2048",
"PYDOLL_THREAD_POOL_SIZE": "10"
}
}
๐ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ต์ ํ
์ฑ๋ฅ ์ต์ ํ ์ค์
๋ธ๋ผ์ฐ์ ์์ ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํ ์ค์ :
# ๋ธ๋ผ์ฐ์ ์์ ์ ์ฑ๋ฅ ์ต์ ํ ์ต์
performance_config = {
"headless": True, # ํค๋๋ฆฌ์ค ๋ชจ๋ ํ์ฑํ
"disable_images": True, # ์ด๋ฏธ์ง ๋ก๋ฉ ๋นํ์ฑํ
"disable_css": False, # CSS๋ ์ ์ง (๋ ์ด์์ ์ ์ง)
"disable_javascript": False, # JavaScript ์ ์ง
"disable_plugins": True, # ํ๋ฌ๊ทธ์ธ ๋นํ์ฑํ
"disable_extensions": True, # ํ์ฅ ํ๋ก๊ทธ๋จ ๋นํ์ฑํ
"disable_dev_shm_usage": True, # /dev/shm ์ฌ์ฉ ๋นํ์ฑํ
"disable_gpu": True, # GPU ๊ฐ์ ๋นํ์ฑํ
"no_sandbox": True, # ์๋๋ฐ์ค ๋นํ์ฑํ (Docker์ฉ)
"single_process": False, # ๋จ์ผ ํ๋ก์ธ์ค ๋ชจ๋
"disable_background_timer_throttling": True,
"disable_renderer_backgrounding": True,
"disable_backgrounding_occluded_windows": True,
"disable_features": [
"VizDisplayCompositor",
"TranslateUI",
"BlinkGenPropertyTrees"
]
}
๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ธฐ ์ํ ์ค์ :
memory_config = {
"max_old_space_size": "2048", # V8 ์์ง ๋ฉ๋ชจ๋ฆฌ ์ ํ
"memory_pressure_off": True, # ๋ฉ๋ชจ๋ฆฌ ์๋ฐ ์๋ฆผ ๋นํ์ฑํ
"max_unused_heap_memory": "64", # ๋ฏธ์ฌ์ฉ ํ ๋ฉ๋ชจ๋ฆฌ ์ ํ
"gc_interval": "100", # ๊ฐ๋น์ง ์ปฌ๋ ์
๊ฐ๊ฒฉ
"disable_background_networking": True,
"disable_background_timer_throttling": True,
"disable_ipc_flooding_protection": True
}
๋ ๋๋ง ์ต์ ํ
๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํ ์ค์ :
render_config = {
"disable_2d_canvas_clip_aa": True,
"disable_2d_canvas_image_chromium": True,
"disable_accelerated_2d_canvas": True,
"disable_accelerated_jpeg_decoding": True,
"disable_accelerated_mjpeg_decode": True,
"disable_accelerated_video_decode": True,
"disable_gpu_video_decode": True,
"use_gl": "swiftshader", # ์ํํธ์จ์ด ๋ ๋๋ง ์ฌ์ฉ
"disable_software_rasterizer": False
}
๐ต๏ธ ์คํ ์ค ๋ชจ๋ ์ค์
๊ธฐ๋ณธ ์คํ ์ค ์ค์
๋ด ํ์ง๋ฅผ ์ฐํํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์คํ ์ค ์ค์ :
stealth_config = {
"user_agent_randomization": True, # ์ฌ์ฉ์ ์์ด์ ํธ ๋ฌด์์ํ
"viewport_randomization": True, # ๋ทฐํฌํธ ํฌ๊ธฐ ๋ฌด์์ํ
"timezone_spoofing": True, # ์๊ฐ๋ ์คํธํ
"language_spoofing": True, # ์ธ์ด ์ค์ ์คํธํ
"webrtc_spoofing": True, # WebRTC IP ์จ๊ธฐ๊ธฐ
"canvas_fingerprint_randomization": True,
"webgl_fingerprint_randomization": True,
"audio_fingerprint_randomization": True,
"font_fingerprint_randomization": True,
"screen_resolution_spoofing": True,
"hardware_concurrency_spoofing": True,
"device_memory_spoofing": True
}
๊ณ ๊ธ ์คํ ์ค ๊ธฐ๋ฅ
๋ ์ ๊ตํ ํ์ง ์ฐํ๋ฅผ ์ํ ๊ณ ๊ธ ์ค์ :
advanced_stealth_config = {
"mouse_movement_humanization": True, # ์ธ๊ฐ์ ์ธ ๋ง์ฐ์ค ์์ง์
"typing_pattern_humanization": True, # ์ธ๊ฐ์ ์ธ ํ์ดํ ํจํด
"scroll_behavior_humanization": True, # ์ธ๊ฐ์ ์ธ ์คํฌ๋กค ๋์
"click_delay_randomization": True, # ํด๋ฆญ ์ง์ฐ ๋ฌด์์ํ
"navigation_delay_randomization": True,
"request_header_randomization": True,
"tls_fingerprint_randomization": True,
"browser_fingerprint_rotation": True,
"proxy_rotation": True, # ํ๋ก์ ์ํ ์ฌ์ฉ
"dns_over_https": True, # DNS over HTTPS ์ฌ์ฉ
"webdriver_property_removal": True, # WebDriver ์์ฑ ์ ๊ฑฐ
"chrome_runtime_removal": True, # Chrome ๋ฐํ์ ํ์ ์ ๊ฑฐ
"notification_permission_spoofing": True,
"geolocation_spoofing": True,
"battery_api_spoofing": True,
"media_device_spoofing": True
}
๋ธ๋ผ์ฐ์ ํ๋กํ์ผ ๋ฌด์์ํ
๋ธ๋ผ์ฐ์ ํ๋กํ์ผ์ ๋ฌด์์ํํ์ฌ ํ์ง๋ฅผ ์ด๋ ต๊ฒ ๋ง๋๋ ์ค์ :
profile_randomization = {
"user_agents": [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
],
"screen_resolutions": [
{"width": 1920, "height": 1080},
{"width": 1366, "height": 768},
{"width": 1440, "height": 900},
{"width": 1536, "height": 864}
],
"languages": ["en-US", "en-GB", "ko-KR", "ja-JP"],
"timezones": [
"America/New_York",
"Europe/London",
"Asia/Tokyo",
"Asia/Seoul"
]
}
๐ ๋คํธ์ํฌ ์ต์ ํ
๋คํธ์ํฌ ์ค์
๋คํธ์ํฌ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ํ ์ค์ :
network_config = {
"timeout": 30, # ๊ธฐ๋ณธ ํ์์์ (์ด)
"retry_attempts": 3, # ์ฌ์๋ ํ์
"retry_delay": 1, # ์ฌ์๋ ๊ฐ๊ฒฉ (์ด)
"connection_pool_size": 100, # ์ฐ๊ฒฐ ํ ํฌ๊ธฐ
"max_connections_per_host": 10, # ํธ์คํธ๋น ์ต๋ ์ฐ๊ฒฐ
"enable_http2": True, # HTTP/2 ํ์ฑํ
"enable_compression": True, # ์์ถ ํ์ฑํ
"tcp_nodelay": True, # TCP ์ง์ฐ ์์
"tcp_keepalive": True, # TCP ์ฐ๊ฒฐ ์ ์ง
"dns_cache_timeout": 300, # DNS ์บ์ ํ์์์
"request_cache_enabled": True, # ์์ฒญ ์บ์ ํ์ฑํ
"response_cache_enabled": True, # ์๋ต ์บ์ ํ์ฑํ
"cache_max_size": "100MB", # ์บ์ ์ต๋ ํฌ๊ธฐ
"bandwidth_throttling": False, # ๋์ญํญ ์ ํ
"latency_simulation": False # ์ง์ฐ ์๋ฎฌ๋ ์ด์
}
ํ๋ก์ ์ค์
ํ๋ก์ ์๋ฒ๋ฅผ ํตํ ๋คํธ์ํฌ ๋ผ์ฐํ :
proxy_config = {
"enabled": True,
"type": "socks5", # http, socks4, socks5
"host": "127.0.0.1",
"port": 9050,
"username": None,
"password": None,
"rotation_enabled": True, # ํ๋ก์ ์ํ ์ฌ์ฉ
"rotation_interval": 300, # ์ํ ๊ฐ๊ฒฉ (์ด)
"proxy_list": [
{"host": "proxy1.example.com", "port": 8080},
{"host": "proxy2.example.com", "port": 8080}
],
"bypass_list": [ # ํ๋ก์ ์ฐํ ๋ชฉ๋ก
"localhost",
"127.0.0.1",
"*.local"
]
}
๐ ์บก์ฐจ ์ฐํ ์ค์
Cloudflare ์ฐํ ์ค์
Cloudflare Turnstile ์บก์ฐจ ์ฐํ๋ฅผ ์ํ ์ค์ :
cloudflare_config = {
"enabled": True,
"auto_solve": True, # ์๋ ํด๊ฒฐ ํ์ฑํ
"solve_timeout": 30, # ํด๊ฒฐ ํ์์์ (์ด)
"retry_attempts": 3, # ์ฌ์๋ ํ์
"human_behavior_simulation": True, # ์ธ๊ฐ ํ๋ ์๋ฎฌ๋ ์ด์
"mouse_movement_realistic": True, # ํ์ค์ ์ธ ๋ง์ฐ์ค ์์ง์
"click_timing_randomization": True, # ํด๋ฆญ ํ์ด๋ฐ ๋ฌด์์ํ
"challenge_detection_delay": 2, # ์ฑ๋ฆฐ์ง ๊ฐ์ง ์ง์ฐ (์ด)
"success_verification_delay": 3, # ์ฑ๊ณต ํ์ธ ์ง์ฐ (์ด)
"failure_retry_delay": 5, # ์คํจ ์ ์ฌ์๋ ์ง์ฐ (์ด)
"debug_mode": False, # ๋๋ฒ๊ทธ ๋ชจ๋
"screenshot_on_failure": True # ์คํจ ์ ์คํฌ๋ฆฐ์ท ์ ์ฅ
}
reCAPTCHA ์ฐํ ์ค์
reCAPTCHA v3 ์ฐํ๋ฅผ ์ํ ์ค์ :
recaptcha_config = {
"enabled": True,
"v3_enabled": True, # reCAPTCHA v3 ์ง์
"v2_enabled": True, # reCAPTCHA v2 ์ง์
"invisible_enabled": True, # ๋น๊ฐ์์ reCAPTCHA ์ง์
"solve_timeout": 45, # ํด๊ฒฐ ํ์์์ (์ด)
"score_threshold": 0.5, # v3 ์ ์ ์๊ณ๊ฐ
"audio_challenge_enabled": True, # ์ค๋์ค ์ฑ๋ฆฐ์ง ์ง์
"image_challenge_enabled": True, # ์ด๋ฏธ์ง ์ฑ๋ฆฐ์ง ์ง์
"ai_solver_enabled": True, # AI ํด๊ฒฐ์ฌ ์ฌ์ฉ
"manual_fallback": False, # ์๋ ํด๊ฒฐ ๋์ฒด
"challenge_retry_limit": 5, # ์ฑ๋ฆฐ์ง ์ฌ์๋ ์ ํ
"success_rate_tracking": True, # ์ฑ๊ณต๋ฅ ์ถ์
"performance_monitoring": True # ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
}
๐พ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ค์
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค์ :
memory_management = {
"max_memory_usage": "2048MB", # ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
"memory_cleanup_interval": 300, # ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ ๊ฐ๊ฒฉ (์ด)
"tab_memory_limit": "512MB", # ํญ๋น ๋ฉ๋ชจ๋ฆฌ ์ ํ
"cache_memory_limit": "256MB", # ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ ํ
"garbage_collection_aggressive": True,
"memory_pressure_handling": True,
"oom_protection": True, # Out of Memory ๋ณดํธ
"swap_usage_limit": "1024MB", # ์ค์ ์ฌ์ฉ๋ ์ ํ
"memory_leak_detection": True, # ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ์ง
"resource_monitoring": True, # ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง
"auto_cleanup_enabled": True, # ์๋ ์ ๋ฆฌ ํ์ฑํ
"cleanup_threshold": 80 # ์ ๋ฆฌ ์๊ณ๊ฐ (%)
}
๋ฆฌ์์ค ์ต์ ํ
์์คํ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ต์ ํํ๊ธฐ ์ํ ์ค์ :
resource_optimization = {
"cpu_usage_limit": 80, # CPU ์ฌ์ฉ๋ ์ ํ (%)
"thread_pool_size": 10, # ์ค๋ ๋ ํ ํฌ๊ธฐ
"process_priority": "normal", # ํ๋ก์ธ์ค ์ฐ์ ์์
"disk_cache_size": "1GB", # ๋์คํฌ ์บ์ ํฌ๊ธฐ
"temp_file_cleanup": True, # ์์ ํ์ผ ์ ๋ฆฌ
"log_rotation_enabled": True, # ๋ก๊ทธ ์ํ ํ์ฑํ
"log_max_size": "100MB", # ๋ก๊ทธ ์ต๋ ํฌ๊ธฐ
"log_retention_days": 7, # ๋ก๊ทธ ๋ณด์กด ๊ธฐ๊ฐ
"resource_monitoring_interval": 60, # ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง ๊ฐ๊ฒฉ (์ด)
"auto_scaling_enabled": True, # ์๋ ์ค์ผ์ผ๋ง ํ์ฑํ
"load_balancing": True, # ๋ก๋ ๋ฐธ๋ฐ์ฑ ํ์ฑํ
"connection_pooling": True # ์ฐ๊ฒฐ ํ๋ง ํ์ฑํ
}
๐ ๋๋ฒ๊น ๋ฐ ๋ก๊น
๋ก๊น ์ค์
์์ธํ ๋ก๊น ์ ์ํ ์ค์ :
logging_config = {
"level": "INFO", # DEBUG, INFO, WARNING, ERROR, CRITICAL
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file_logging": True, # ํ์ผ ๋ก๊น
ํ์ฑํ
"console_logging": True, # ์ฝ์ ๋ก๊น
ํ์ฑํ
"log_file": "pydoll_mcp.log", # ๋ก๊ทธ ํ์ผ ์ด๋ฆ
"max_file_size": "10MB", # ์ต๋ ํ์ผ ํฌ๊ธฐ
"backup_count": 5, # ๋ฐฑ์
ํ์ผ ์
"rotation_interval": "daily", # ์ํ ๊ฐ๊ฒฉ
"structured_logging": True, # ๊ตฌ์กฐํ๋ ๋ก๊น
"json_format": False, # JSON ํ์
"include_stack_trace": True, # ์คํ ํธ๋ ์ด์ค ํฌํจ
"log_requests": True, # HTTP ์์ฒญ ๋ก๊น
"log_responses": True, # HTTP ์๋ต ๋ก๊น
"log_errors": True, # ์ค๋ฅ ๋ก๊น
"log_performance": True, # ์ฑ๋ฅ ๋ก๊น
"sensitive_data_masking": True # ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋ง์คํน
}
๋๋ฒ๊น ๋๊ตฌ
๊ฐ๋ฐ ๋ฐ ๋๋ฒ๊น ์ ์ํ ๋๊ตฌ ์ค์ :
debugging_config = {
"debug_mode": False, # ๋๋ฒ๊ทธ ๋ชจ๋
"verbose_logging": False, # ์์ธ ๋ก๊น
"screenshot_on_error": True, # ์ค๋ฅ ์ ์คํฌ๋ฆฐ์ท
"save_page_source": True, # ํ์ด์ง ์์ค ์ ์ฅ
"network_logging": True, # ๋คํธ์ํฌ ๋ก๊น
"console_logging": True, # ๋ธ๋ผ์ฐ์ ์ฝ์ ๋ก๊น
"performance_profiling": True, # ์ฑ๋ฅ ํ๋กํ์ผ๋ง
"memory_profiling": True, # ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง
"execution_tracing": True, # ์คํ ์ถ์
"step_by_step_debugging": False, # ๋จ๊ณ๋ณ ๋๋ฒ๊น
"breakpoint_enabled": False, # ์ค๋จ์ ํ์ฑํ
"interactive_debugging": False, # ๋ํํ ๋๋ฒ๊น
"debug_output_dir": "./debug", # ๋๋ฒ๊ทธ ์ถ๋ ฅ ๋๋ ํ ๋ฆฌ
"debug_session_recording": True # ๋๋ฒ๊ทธ ์ธ์
๋
นํ
}
๐ก๏ธ ๋ณด์ ๋ฐ ๊ฐ์ธ์ ๋ณด ๋ณดํธ
๋ณด์ ์ค์
๋ธ๋ผ์ฐ์ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํ ์ค์ :
security_config = {
"disable_web_security": False, # ์น ๋ณด์ ๋นํ์ฑํ (๊ฐ๋ฐ์ฉ)
"disable_features": [
"VizDisplayCompositor",
"TranslateUI",
"MediaRouter"
],
"enable_features": [
"NetworkService",
"VizServiceDisplay"
],
"certificate_transparency": True, # ์ธ์ฆ์ ํฌ๋ช
์ฑ
"hsts_enabled": True, # HSTS ํ์ฑํ
"mixed_content_blocking": True, # ํผํฉ ์ฝํ
์ธ ์ฐจ๋จ
"insecure_content_blocking": True, # ๋น๋ณด์ ์ฝํ
์ธ ์ฐจ๋จ
"xss_protection": True, # XSS ๋ณดํธ
"content_security_policy": True, # CSP ํ์ฑํ
"referrer_policy": "strict-origin-when-cross-origin",
"permissions_policy": True, # ๊ถํ ์ ์ฑ
ํ์ฑํ
"feature_policy": True, # ๊ธฐ๋ฅ ์ ์ฑ
ํ์ฑํ
"sandbox_enabled": True, # ์๋๋ฐ์ค ํ์ฑํ
"site_isolation": True # ์ฌ์ดํธ ๊ฒฉ๋ฆฌ
}
๊ฐ์ธ์ ๋ณด ๋ณดํธ ์ค์
๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ์ค์ :
privacy_config = {
"do_not_track": True, # Do Not Track ํ์ฑํ
"disable_background_sync": True, # ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ ๋นํ์ฑํ
"disable_background_fetch": True, # ๋ฐฑ๊ทธ๋ผ์ด๋ ํ์น ๋นํ์ฑํ
"disable_push_messaging": True, # ํธ์ ๋ฉ์์ง ๋นํ์ฑํ
"disable_notifications": True, # ์๋ฆผ ๋นํ์ฑํ
"disable_geolocation": True, # ์์น ์ ๋ณด ๋นํ์ฑํ
"disable_camera": True, # ์นด๋ฉ๋ผ ๋นํ์ฑํ
"disable_microphone": True, # ๋ง์ดํฌ ๋นํ์ฑํ
"disable_sensors": True, # ์ผ์ ๋นํ์ฑํ
"disable_webrtc": True, # WebRTC ๋นํ์ฑํ
"disable_webgl": True, # WebGL ๋นํ์ฑํ
"disable_canvas_reading": True, # ์บ๋ฒ์ค ์ฝ๊ธฐ ๋นํ์ฑํ
"disable_font_access": True, # ํฐํธ ์ ๊ทผ ๋นํ์ฑํ
"disable_clipboard_access": True, # ํด๋ฆฝ๋ณด๋ ์ ๊ทผ ๋นํ์ฑํ
"clear_data_on_exit": True, # ์ข
๋ฃ ์ ๋ฐ์ดํฐ ์ ๋ฆฌ
"incognito_mode": True, # ์ํฌ๋ฆฟ ๋ชจ๋
"private_browsing": True # ๊ฐ์ธ ๋ธ๋ผ์ฐ์ง
}
๐ฏ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ์ต์ ํ
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ์ํ ์ค์ :
performance_monitoring = {
"enabled": True,
"metrics_collection": True, # ๋ฉํธ๋ฆญ ์์ง
"response_time_tracking": True, # ์๋ต ์๊ฐ ์ถ์
"resource_usage_tracking": True, # ๋ฆฌ์์ค ์ฌ์ฉ๋ ์ถ์
"memory_usage_tracking": True, # ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ถ์
"network_usage_tracking": True, # ๋คํธ์ํฌ ์ฌ์ฉ๋ ์ถ์
"error_rate_tracking": True, # ์ค๋ฅ์จ ์ถ์
"success_rate_tracking": True, # ์ฑ๊ณต๋ฅ ์ถ์
"throughput_tracking": True, # ์ฒ๋ฆฌ๋ ์ถ์
"latency_tracking": True, # ์ง์ฐ ์๊ฐ ์ถ์
"concurrent_connections": True, # ๋์ ์ฐ๊ฒฐ ์ ์ถ์
"alert_thresholds": {
"cpu_usage": 80, # CPU ์ฌ์ฉ๋ ์๊ณ๊ฐ (%)
"memory_usage": 85, # ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์๊ณ๊ฐ (%)
"error_rate": 5, # ์ค๋ฅ์จ ์๊ณ๊ฐ (%)
"response_time": 30 # ์๋ต ์๊ฐ ์๊ณ๊ฐ (์ด)
},
"reporting_interval": 60, # ๋ณด๊ณ ๊ฐ๊ฒฉ (์ด)
"dashboard_enabled": True, # ๋์๋ณด๋ ํ์ฑํ
"export_metrics": True, # ๋ฉํธ๋ฆญ ๋ด๋ณด๋ด๊ธฐ
"metric_retention": 30 # ๋ฉํธ๋ฆญ ๋ณด์กด ๊ธฐ๊ฐ (์ผ)
}
์๋ ์ต์ ํ
์๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ค์ :
auto_optimization = {
"enabled": True,
"adaptive_timeout": True, # ์ ์ํ ํ์์์
"dynamic_retry": True, # ๋์ ์ฌ์๋
"load_balancing": True, # ๋ก๋ ๋ฐธ๋ฐ์ฑ
"auto_scaling": True, # ์๋ ์ค์ผ์ผ๋ง
"resource_allocation": True, # ๋ฆฌ์์ค ํ ๋น ์ต์ ํ
"cache_optimization": True, # ์บ์ ์ต์ ํ
"connection_pooling": True, # ์ฐ๊ฒฐ ํ๋ง ์ต์ ํ
"memory_optimization": True, # ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
"cpu_optimization": True, # CPU ์ต์ ํ
"network_optimization": True, # ๋คํธ์ํฌ ์ต์ ํ
"optimization_interval": 300, # ์ต์ ํ ๊ฐ๊ฒฉ (์ด)
"performance_baseline": True, # ์ฑ๋ฅ ๊ธฐ์ค์ ์ค์
"anomaly_detection": True, # ์ด์ ๊ฐ์ง
"predictive_optimization": True, # ์์ธก ์ต์ ํ
"ml_optimization": False # ๋จธ์ ๋ฌ๋ ์ต์ ํ
}
๐ ์ค์ ์์
์ต๊ณ ์ฑ๋ฅ ๋ชจ๋
์ต๊ณ ์ฑ๋ฅ์ ์ํ ์ค์ ์์:
{
"mcpServers": {
"pydoll": {
"command": "python",
"args": ["-m", "pydoll_mcp.server"],
"env": {
"PYDOLL_LOG_LEVEL": "WARNING",
"PYDOLL_HEADLESS": "true",
"PYDOLL_DISABLE_IMAGES": "true",
"PYDOLL_DISABLE_CSS": "true",
"PYDOLL_DISABLE_JAVASCRIPT": "false",
"PYDOLL_MAX_BROWSERS": "5",
"PYDOLL_MAX_TABS": "10",
"PYDOLL_MEMORY_LIMIT": "4096",
"PYDOLL_PERFORMANCE_MODE": "maximum",
"PYDOLL_CACHE_ENABLED": "true",
"PYDOLL_COMPRESSION": "true",
"PYTHONIOENCODING": "utf-8"
}
}
}
}
์ต๊ณ ์คํ ์ค ๋ชจ๋
์ต๊ณ ์คํ ์ค๋ฅผ ์ํ ์ค์ ์์:
{
"mcpServers": {
"pydoll": {
"command": "python",
"args": ["-m", "pydoll_mcp.server"],
"env": {
"PYDOLL_LOG_LEVEL": "ERROR",
"PYDOLL_STEALTH_MODE": "maximum",
"PYDOLL_FINGERPRINT_RANDOMIZATION": "true",
"PYDOLL_USER_AGENT_ROTATION": "true",
"PYDOLL_PROXY_ROTATION": "true",
"PYDOLL_HUMAN_BEHAVIOR": "true",
"PYDOLL_CAPTCHA_BYPASS": "true",
"PYDOLL_ANTI_DETECTION": "true",
"PYDOLL_CANVAS_SPOOFING": "true",
"PYDOLL_WEBGL_SPOOFING": "true",
"PYDOLL_TIMEZONE_SPOOFING": "true",
"PYTHONIOENCODING": "utf-8"
}
}
}
}
๊ท ํ ๋ชจ๋
์ฑ๋ฅ๊ณผ ์คํ ์ค์ ๊ท ํ์ ๋ง์ถ ์ค์ ์์:
{
"mcpServers": {
"pydoll": {
"command": "python",
"args": ["-m", "pydoll_mcp.server"],
"env": {
"PYDOLL_LOG_LEVEL": "INFO",
"PYDOLL_HEADLESS": "true",
"PYDOLL_STEALTH_MODE": "balanced",
"PYDOLL_PERFORMANCE_MODE": "balanced",
"PYDOLL_CAPTCHA_BYPASS": "true",
"PYDOLL_DISABLE_IMAGES": "false",
"PYDOLL_MAX_BROWSERS": "3",
"PYDOLL_MAX_TABS": "5",
"PYDOLL_MEMORY_LIMIT": "2048",
"PYDOLL_HUMAN_BEHAVIOR": "true",
"PYDOLL_USER_AGENT_ROTATION": "true",
"PYTHONIOENCODING": "utf-8"
}
}
}
}
๐ ์ค์ ์ ์ฉ ๋ฐฉ๋ฒ
1. Claude Desktop ์ค์ ํ์ผ ์์
์ค์ ํ์ผ ์์น:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
2. ํ๊ฒฝ ๋ณ์ ์ค์
์์คํ ํ๊ฒฝ ๋ณ์๋ก ์ค์ :
# Windows
set PYDOLL_LOG_LEVEL=INFO
set PYDOLL_STEALTH_MODE=true
# Linux/macOS
export PYDOLL_LOG_LEVEL=INFO
export PYDOLL_STEALTH_MODE=true
3. ์ค์ ๊ฒ์ฆ
์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋์๋์ง ํ์ธ:
python -m pydoll_mcp.cli test-installation --verbose
python -m pydoll_mcp.cli status --config
๐จ ์ฃผ์์ฌํญ
์ฑ๋ฅ vs ์คํ ์ค ํธ๋ ์ด๋์คํ
- ๊ณ ์ฑ๋ฅ ๋ชจ๋: ๋น ๋ฅธ ์คํ์ด์ง๋ง ํ์ง ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ
- ๊ณ ์คํ ์ค ๋ชจ๋: ํ์ง ํํผ ์ฐ์ํ์ง๋ง ์ฑ๋ฅ ์ ํ
- ๊ท ํ ๋ชจ๋: ์ฑ๋ฅ๊ณผ ์คํ ์ค์ ์ ์ ํ ๊ท ํ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ค์ ์ ๋๋ฌด ๋ฎ๊ฒ ํ๋ฉด ์ฑ๋ฅ ์ ํ ๋ฐ์
- ์์คํ ๋ฉ๋ชจ๋ฆฌ์ 50-70% ์ดํ๋ก ์ ํ ๊ถ์ฅ
๋ฒ์ ๋ฐ ์ค๋ฆฌ์ ๊ณ ๋ ค์ฌํญ
- ์น์ฌ์ดํธ์ ์ด์ฉ์ฝ๊ด ๋ฐ robots.txt ์ค์
- ๊ณผ๋ํ ์์ฒญ์ผ๋ก ์๋ฒ ๋ถํ ๋ฐฉ์ง
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์ฑ ์ค์
์ด ๊ณ ๊ธ ์ค์ ์ ํตํด PyDoll MCP Server๋ฅผ ์ต์ ํํ์ฌ ๋ ํจ์จ์ ์ด๊ณ ์์ ํ ๋ธ๋ผ์ฐ์ ์๋ํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.