#!/usr/bin/env python3 """ Debug Video Issue - Final Diagnostic Script """ import asyncio import json import logging from pathlib import Path from browser.playwright_manager import PlaywrightManager logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger("video_debug") async def debug_video_issue(): """Comprehensive video issue debugging""" print("šŸ” STARTING COMPREHENSIVE VIDEO DEBUG ANALYSIS") # Test with fresh manager manager = PlaywrightManager(headless=False) try: page = manager.start() print("šŸ“‹ STEP 1: Navigating to Instagram...") success = manager.navigate_to("https://www.instagram.com") if not success: print("āŒ Failed to navigate to Instagram") return print("šŸ“‹ STEP 2: Checking browser capabilities...") # Check all video-related capabilities capabilities = page.evaluate(""" () => { const results = { // Basic video support video_element: !!document.createElement('video'), video_can_play_mp4: document.createElement('video').canPlayType('video/mp4'), video_can_play_webm: document.createElement('video').canPlayType('video/webm'), // DRM Support widevine_support: !!navigator.requestMediaKeySystemAccess, media_source: !!window.MediaSource, encrypted_media: !!window.MediaKeys, // Chrome APIs chrome_present: !!window.chrome, chrome_runtime: !!(window.chrome && window.chrome.runtime), chrome_app: window.chrome ? window.chrome.app : 'missing', chrome_csi: !!(window.chrome && window.chrome.csi), chrome_loadtimes: !!(window.chrome && window.chrome.loadTimes), // Media Devices media_devices: !!(navigator.mediaDevices), enumerate_devices: !!(navigator.mediaDevices && navigator.mediaDevices.enumerateDevices), get_user_media: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia), // Performance API performance_now: !!performance.now, performance_timing: !!performance.timing, // Automation markers webdriver_present: !!navigator.webdriver, automation_markers: { webdriver_script_fn: !!navigator.__webdriver_script_fn, webdriver_evaluate: !!window.__webdriver_evaluate, selenium_unwrapped: !!document.__selenium_unwrapped, chrome_webdriver: !!(window.chrome && window.chrome.webdriver) }, // User agent analysis user_agent: navigator.userAgent, platform: navigator.platform, vendor: navigator.vendor, languages: navigator.languages, // Screen info screen_width: screen.width, screen_height: screen.height, device_pixel_ratio: devicePixelRatio, // Timing page_load_time: performance.now() }; return results; } """) print("šŸ“Š BROWSER CAPABILITIES:") for key, value in capabilities.items(): print(f" {key}: {value}") print("\nšŸ“‹ STEP 3: Testing video element creation...") video_test = page.evaluate(""" () => { // Create video element and test const video = document.createElement('video'); video.style.display = 'none'; document.body.appendChild(video); const results = { video_created: true, video_properties: { autoplay: video.autoplay, controls: video.controls, muted: video.muted, preload: video.preload, crossOrigin: video.crossOrigin }, video_methods: { canPlayType: typeof video.canPlayType, play: typeof video.play, pause: typeof video.pause, load: typeof video.load }, codec_support: { mp4_h264: video.canPlayType('video/mp4; codecs="avc1.42E01E"'), mp4_h265: video.canPlayType('video/mp4; codecs="hev1.1.6.L93.B0"'), webm_vp8: video.canPlayType('video/webm; codecs="vp8"'), webm_vp9: video.canPlayType('video/webm; codecs="vp9"'), audio_aac: video.canPlayType('audio/mp4; codecs="mp4a.40.2"'), audio_opus: video.canPlayType('audio/webm; codecs="opus"') } }; document.body.removeChild(video); return results; } """) print("\nšŸ“Š VIDEO ELEMENT TEST:") for key, value in video_test.items(): print(f" {key}: {value}") print("\nšŸ“‹ STEP 4: Checking console errors...") # Wait a bit for any console errors await asyncio.sleep(2) # Check for specific Instagram video errors print("\nšŸ“‹ STEP 5: Looking for Instagram-specific issues...") # Try to find any video elements or error messages video_status = page.evaluate(""" () => { const results = { video_elements_count: document.querySelectorAll('video').length, error_messages: [], instagram_classes: { video_error_present: !!document.querySelector('.x6s0dn4.xatbrnm.x9f619'), video_containers: document.querySelectorAll('[class*="video"]').length, error_spans: [] } }; // Look for error messages const errorSpans = document.querySelectorAll('span'); errorSpans.forEach(span => { const text = span.textContent.trim(); if (text.includes('Video') || text.includes('video') || text.includes('abgespielt') || text.includes('richtig')) { results.instagram_classes.error_spans.push({ text: text, classes: span.className }); } }); return results; } """) print("\nšŸ“Š INSTAGRAM VIDEO STATUS:") for key, value in video_status.items(): print(f" {key}: {value}") print("\nšŸ“‹ STEP 6: Testing DRM capabilities...") drm_test = page.evaluate(""" () => { return new Promise((resolve) => { if (!navigator.requestMediaKeySystemAccess) { resolve({drm_support: false, error: 'No requestMediaKeySystemAccess'}); return; } navigator.requestMediaKeySystemAccess('com.widevine.alpha', [{ initDataTypes: ['cenc'], videoCapabilities: [{contentType: 'video/mp4; codecs="avc1.42E01E"'}] }]).then(access => { resolve({ drm_support: true, key_system: access.keySystem, configuration: access.getConfiguration() }); }).catch(error => { resolve({ drm_support: false, error: error.message }); }); }); } """) print("\nšŸ“Š DRM TEST RESULTS:") print(f" {drm_test}") print("\nšŸŽÆ FINAL DIAGNOSIS:") print("=" * 50) # Analyze results issues = [] if not capabilities.get('video_element'): issues.append("āŒ Video elements not supported") if capabilities.get('webdriver_present'): issues.append("āŒ Webdriver detection present") if not capabilities.get('widevine_support'): issues.append("āŒ Widevine DRM not supported") if video_status.get('instagram_classes', {}).get('video_error_present'): issues.append("āŒ Instagram video error message detected") if not drm_test.get('drm_support'): issues.append(f"āŒ DRM test failed: {drm_test.get('error', 'Unknown')}") automation_markers = capabilities.get('automation_markers', {}) detected_markers = [k for k, v in automation_markers.items() if v] if detected_markers: issues.append(f"āŒ Automation markers detected: {detected_markers}") if issues: print("🚨 CRITICAL ISSUES FOUND:") for issue in issues: print(f" {issue}") else: print("āœ… No obvious technical issues detected") print("šŸ¤” The problem might be:") print(" - Account-specific restrictions") print(" - Geographic blocking") print(" - Instagram A/B testing") print(" - Specific video content restrictions") print("\nšŸ“‹ RECOMMENDATION:") if len(issues) > 3: print(" šŸ”„ Technical fixes needed - automation still detectable") elif len(issues) > 0: print(" šŸ”§ Some technical issues remain") else: print(" šŸ’” Technical setup appears correct - likely policy/account issue") except Exception as e: logger.error(f"Debug failed: {e}") print(f"āŒ Debug script failed: {e}") finally: manager.close() if __name__ == "__main__": asyncio.run(debug_video_issue())