Initial commit
Dieser Commit ist enthalten in:
267
debug_video_issue.py
Normale Datei
267
debug_video_issue.py
Normale Datei
@ -0,0 +1,267 @@
|
||||
#!/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())
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren