Spaces:
Sleeping
Sleeping
| """ | |
| Cloud Example 4: Proxy Usage ๐ | |
| =============================== | |
| This example demonstrates reliable proxy usage scenarios: | |
| - Different country proxies for geo-restrictions | |
| - IP address and location verification | |
| - Region-specific content access (streaming, news) | |
| - Search result localization by country | |
| - Mobile/residential proxy benefits | |
| Perfect for: Geo-restricted content, location testing, regional analysis | |
| Cost: ~$0.08 (1 task + 6-8 steps with proxy enabled) | |
| """ | |
| import argparse | |
| import os | |
| import time | |
| from typing import Any | |
| import requests | |
| from requests.exceptions import RequestException | |
| # Configuration | |
| API_KEY = os.getenv('BROWSER_USE_API_KEY') | |
| if not API_KEY: | |
| raise ValueError( | |
| 'Please set BROWSER_USE_API_KEY environment variable. You can also create an API key at https://cloud.browser-use.com/new-api-key' | |
| ) | |
| BASE_URL = os.getenv('BROWSER_USE_BASE_URL', 'https://api.browser-use.com/api/v1') | |
| TIMEOUT = int(os.getenv('BROWSER_USE_TIMEOUT', '30')) | |
| HEADERS = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'} | |
| def _request_with_retry(method: str, url: str, **kwargs) -> requests.Response: | |
| """Make HTTP request with timeout and retry logic.""" | |
| kwargs.setdefault('timeout', TIMEOUT) | |
| for attempt in range(3): | |
| try: | |
| response = requests.request(method, url, **kwargs) | |
| response.raise_for_status() | |
| return response | |
| except RequestException as e: | |
| if attempt == 2: # Last attempt | |
| raise | |
| sleep_time = 2**attempt | |
| print(f'โ ๏ธ Request failed (attempt {attempt + 1}/3), retrying in {sleep_time}s: {e}') | |
| time.sleep(sleep_time) | |
| raise RuntimeError('Unexpected error in retry logic') | |
| def create_task_with_proxy(instructions: str, country_code: str = 'us') -> str: | |
| """ | |
| Create a task with proxy enabled from a specific country. | |
| Args: | |
| instructions: Task description | |
| country_code: Proxy country ('us', 'fr', 'it', 'jp', 'au', 'de', 'fi', 'ca') | |
| Returns: | |
| task_id: Unique identifier for the created task | |
| """ | |
| print(f'๐ Creating task with {country_code.upper()} proxy') | |
| print(f'๐ Task: {instructions}') | |
| payload = { | |
| 'task': instructions, | |
| 'llm_model': 'gpt-4.1-mini', | |
| # Proxy configuration | |
| 'use_proxy': True, # Required for captcha solving | |
| 'proxy_country_code': country_code, # Choose proxy location | |
| # Standard settings | |
| 'use_adblock': True, # Block ads for faster loading | |
| 'highlight_elements': True, # Keep highlighting for visibility | |
| 'max_agent_steps': 15, | |
| # Enable sharing for viewing execution | |
| 'enable_public_share': True, # Get shareable URLs | |
| } | |
| response = _request_with_retry('post', f'{BASE_URL}/run-task', headers=HEADERS, json=payload) | |
| task_id = response.json()['id'] | |
| print(f'โ Task created with {country_code.upper()} proxy: {task_id}') | |
| return task_id | |
| def test_ip_location(country_code: str) -> dict[str, Any]: | |
| """Test IP address and location detection with proxy.""" | |
| task = """ | |
| Go to whatismyipaddress.com and tell me: | |
| 1. The detected IP address | |
| 2. The detected country/location | |
| 3. The ISP/organization | |
| 4. Any other location details shown | |
| Please be specific about what you see on the page. | |
| """ | |
| task_id = create_task_with_proxy(task, country_code) | |
| return wait_for_completion(task_id) | |
| def test_geo_restricted_content(country_code: str) -> dict[str, Any]: | |
| """Test access to geo-restricted content.""" | |
| task = """ | |
| Go to a major news website (like BBC, CNN, or local news) and check: | |
| 1. What content is available | |
| 2. Any geo-restriction messages | |
| 3. Local/regional content differences | |
| 4. Language or currency preferences shown | |
| Note any differences from what you might expect. | |
| """ | |
| task_id = create_task_with_proxy(task, country_code) | |
| return wait_for_completion(task_id) | |
| def test_streaming_service_access(country_code: str) -> dict[str, Any]: | |
| """Test access to region-specific streaming content.""" | |
| task = """ | |
| Go to a major streaming service website (like Netflix, YouTube, or BBC iPlayer) | |
| and check what content or messaging appears. | |
| Report: | |
| 1. What homepage content is shown | |
| 2. Any geo-restriction messages or content differences | |
| 3. Available content regions or language options | |
| 4. Any pricing or availability differences | |
| Note: Don't try to log in, just observe the publicly available content. | |
| """ | |
| task_id = create_task_with_proxy(task, country_code) | |
| return wait_for_completion(task_id) | |
| def test_search_results_by_location(country_code: str) -> dict[str, Any]: | |
| """Test how search results vary by location.""" | |
| task = """ | |
| Go to Google and search for "best restaurants near me" or "local news". | |
| Report: | |
| 1. What local results appear | |
| 2. The detected location in search results | |
| 3. Any location-specific content or ads | |
| 4. Language preferences | |
| This will show how search results change based on proxy location. | |
| """ | |
| task_id = create_task_with_proxy(task, country_code) | |
| return wait_for_completion(task_id) | |
| def wait_for_completion(task_id: str) -> dict[str, Any]: | |
| """Wait for task completion and return results.""" | |
| print(f'โณ Waiting for task {task_id} to complete...') | |
| start_time = time.time() | |
| while True: | |
| response = _request_with_retry('get', f'{BASE_URL}/task/{task_id}', headers=HEADERS) | |
| details = response.json() | |
| status = details['status'] | |
| steps = len(details.get('steps', [])) | |
| elapsed = time.time() - start_time | |
| # Build status message | |
| if status == 'running': | |
| status_msg = f'๐ Proxy task | Step {steps} | โฑ๏ธ {elapsed:.0f}s | ๐ค Processing...' | |
| else: | |
| status_msg = f'๐ Proxy task | Step {steps} | โฑ๏ธ {elapsed:.0f}s | Status: {status}' | |
| # Clear line and show status | |
| print(f'\r{status_msg:<80}', end='', flush=True) | |
| if status == 'finished': | |
| print(f'\rโ Task completed in {steps} steps! ({elapsed:.1f}s total)' + ' ' * 20) | |
| return details | |
| elif status in ['failed', 'stopped']: | |
| print(f'\rโ Task {status} after {steps} steps' + ' ' * 30) | |
| return details | |
| time.sleep(3) | |
| def demo_proxy_countries(): | |
| """Demonstrate proxy usage across different countries.""" | |
| print('\n๐ Demo 1: Proxy Countries Comparison') | |
| print('-' * 45) | |
| countries = [('us', 'United States'), ('de', 'Germany'), ('jp', 'Japan'), ('au', 'Australia')] | |
| results = {} | |
| for code, name in countries: | |
| print(f'\n๐ Testing {name} ({code.upper()}) proxy:') | |
| print('=' * 40) | |
| result = test_ip_location(code) | |
| results[code] = result | |
| if result.get('output'): | |
| print(f'๐ Location Result: {result["output"][:200]}...') | |
| # Show execution URLs | |
| if result.get('live_url'): | |
| print(f'๐ Live Preview: {result["live_url"]}') | |
| if result.get('public_share_url'): | |
| print(f'๐ Share URL: {result["public_share_url"]}') | |
| elif result.get('share_url'): | |
| print(f'๐ Share URL: {result["share_url"]}') | |
| print('-' * 40) | |
| time.sleep(2) # Brief pause between tests | |
| # Summary comparison | |
| print('\n๐ Proxy Location Summary:') | |
| print('=' * 30) | |
| for code, result in results.items(): | |
| status = result.get('status', 'unknown') | |
| print(f'{code.upper()}: {status}') | |
| def demo_geo_restrictions(): | |
| """Demonstrate geo-restriction bypass.""" | |
| print('\n๐ซ Demo 2: Geo-Restriction Testing') | |
| print('-' * 40) | |
| # Test from different locations | |
| locations = [('us', 'US content'), ('de', 'European content')] | |
| for code, description in locations: | |
| print(f'\n๐ Testing {description} with {code.upper()} proxy:') | |
| result = test_geo_restricted_content(code) | |
| if result.get('output'): | |
| print(f'๐ฐ Content Access: {result["output"][:200]}...') | |
| time.sleep(2) | |
| def demo_streaming_access(): | |
| """Demonstrate streaming service access with different proxies.""" | |
| print('\n๐บ Demo 3: Streaming Service Access') | |
| print('-' * 40) | |
| locations = [('us', 'US'), ('de', 'Germany')] | |
| for code, name in locations: | |
| print(f'\n๐ Testing streaming access from {name}:') | |
| result = test_streaming_service_access(code) | |
| if result.get('output'): | |
| print(f'๐บ Access Result: {result["output"][:200]}...') | |
| time.sleep(2) | |
| def demo_search_localization(): | |
| """Demonstrate search result localization.""" | |
| print('\n๐ Demo 4: Search Localization') | |
| print('-' * 35) | |
| locations = [('us', 'US'), ('de', 'Germany')] | |
| for code, name in locations: | |
| print(f'\n๐ Testing search results from {name}:') | |
| result = test_search_results_by_location(code) | |
| if result.get('output'): | |
| print(f'๐ Search Results: {result["output"][:200]}...') | |
| time.sleep(2) | |
| def main(): | |
| """Demonstrate comprehensive proxy usage.""" | |
| print('๐ Browser Use Cloud - Proxy Usage Examples') | |
| print('=' * 50) | |
| print('๐ฏ Proxy Benefits:') | |
| print('โข Bypass geo-restrictions') | |
| print('โข Test location-specific content') | |
| print('โข Access region-locked websites') | |
| print('โข Mobile/residential IP addresses') | |
| print('โข Verify IP geolocation') | |
| print('\n๐ Available Countries:') | |
| countries = ['๐บ๐ธ US', '๐ซ๐ท France', '๐ฎ๐น Italy', '๐ฏ๐ต Japan', '๐ฆ๐บ Australia', '๐ฉ๐ช Germany', '๐ซ๐ฎ Finland', '๐จ๐ฆ Canada'] | |
| print(' โข '.join(countries)) | |
| try: | |
| # Parse command line arguments | |
| parser = argparse.ArgumentParser(description='Proxy usage examples') | |
| parser.add_argument( | |
| '--demo', choices=['countries', 'geo', 'streaming', 'search', 'all'], default='countries', help='Which demo to run' | |
| ) | |
| args = parser.parse_args() | |
| print(f'\n๐ Running {args.demo} demo(s)...') | |
| if args.demo == 'countries': | |
| demo_proxy_countries() | |
| elif args.demo == 'geo': | |
| demo_geo_restrictions() | |
| elif args.demo == 'streaming': | |
| demo_streaming_access() | |
| elif args.demo == 'search': | |
| demo_search_localization() | |
| elif args.demo == 'all': | |
| demo_proxy_countries() | |
| demo_geo_restrictions() | |
| demo_streaming_access() | |
| demo_search_localization() | |
| except requests.exceptions.RequestException as e: | |
| print(f'โ API Error: {e}') | |
| except Exception as e: | |
| print(f'โ Error: {e}') | |
| if __name__ == '__main__': | |
| main() | |