Spaces:
Sleeping
Sleeping
| """ | |
| Network monitoring and performance analysis features | |
| """ | |
| import json | |
| import time | |
| import logging | |
| from browser.driver import get_driver, cleanup_driver | |
| logger = logging.getLogger(__name__) | |
| def monitor_network_requests(url: str, duration: int = 5, use_persistent: bool = False) -> str: | |
| """Monitor network requests made by a page""" | |
| driver = None | |
| try: | |
| driver = get_driver(None, use_persistent) # Don't navigate yet | |
| # Inject JavaScript to monitor network | |
| monitor_script = """ | |
| window.networkRequests = []; | |
| const originalFetch = window.fetch; | |
| const originalXHR = window.XMLHttpRequest.prototype.open; | |
| // Monitor fetch requests | |
| window.fetch = function(...args) { | |
| const request = { | |
| method: args[1]?.method || 'GET', | |
| url: args[0], | |
| timestamp: new Date().toISOString(), | |
| type: 'fetch' | |
| }; | |
| window.networkRequests.push(request); | |
| return originalFetch.apply(this, args); | |
| }; | |
| // Monitor XHR requests | |
| window.XMLHttpRequest.prototype.open = function(method, url) { | |
| const request = { | |
| method: method, | |
| url: url, | |
| timestamp: new Date().toISOString(), | |
| type: 'xhr' | |
| }; | |
| window.networkRequests.push(request); | |
| return originalXHR.apply(this, arguments); | |
| }; | |
| """ | |
| # Navigate to page and inject monitoring | |
| driver.get(url) | |
| driver.execute_script(monitor_script) | |
| # Wait and collect requests | |
| time.sleep(duration) | |
| # Get collected requests | |
| requests = driver.execute_script("return window.networkRequests;") | |
| # Also get performance entries | |
| performance_entries = driver.execute_script(""" | |
| return performance.getEntriesByType('resource').map(entry => ({ | |
| name: entry.name, | |
| type: entry.initiatorType, | |
| duration: entry.duration, | |
| size: entry.transferSize, | |
| startTime: entry.startTime | |
| })); | |
| """) | |
| result = { | |
| "intercepted_requests": requests, | |
| "performance_entries": performance_entries, | |
| "total_requests": len(requests) + len(performance_entries) | |
| } | |
| return json.dumps(result, indent=2, default=str) | |
| except Exception as e: | |
| logger.error(f"Error in monitor_network_requests: {e}") | |
| return f"Error: {e}" | |
| finally: | |
| cleanup_driver(driver, use_persistent) | |
| def get_console_logs(url: str, use_persistent: bool = False) -> str: | |
| """Capture browser console logs""" | |
| driver = None | |
| try: | |
| driver = get_driver(None, use_persistent) | |
| # Inject console log capture before navigation | |
| driver.execute_script(""" | |
| window.consoleLogs = []; | |
| const originalLog = console.log; | |
| const originalError = console.error; | |
| const originalWarn = console.warn; | |
| console.log = function(...args) { | |
| window.consoleLogs.push({ | |
| type: 'log', | |
| message: args.join(' '), | |
| timestamp: new Date().toISOString() | |
| }); | |
| originalLog.apply(console, args); | |
| }; | |
| console.error = function(...args) { | |
| window.consoleLogs.push({ | |
| type: 'error', | |
| message: args.join(' '), | |
| timestamp: new Date().toISOString() | |
| }); | |
| originalError.apply(console, args); | |
| }; | |
| console.warn = function(...args) { | |
| window.consoleLogs.push({ | |
| type: 'warn', | |
| message: args.join(' '), | |
| timestamp: new Date().toISOString() | |
| }); | |
| originalWarn.apply(console, args); | |
| }; | |
| """) | |
| # Navigate to page | |
| driver.get(url) | |
| time.sleep(3) # Wait for logs | |
| # Get captured logs | |
| logs = driver.execute_script("return window.consoleLogs;") | |
| return json.dumps(logs, indent=2, default=str) | |
| except Exception as e: | |
| logger.error(f"Error in get_console_logs: {e}") | |
| return f"Error: {e}" | |
| finally: | |
| cleanup_driver(driver, use_persistent) |