#!/usr/bin/env python3
"""
Script pour récupérer la bio d'un post Instagram avec Selenium
"""

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time
import json
import logging

# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def setup_driver():
    """Configure le driver Selenium"""
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.service import Service
    import tempfile
    
    # Créer un répertoire temporaire unique pour le profil Chrome
    user_data_dir = tempfile.mkdtemp()
    
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument(f'--user-data-dir={user_data_dir}')
    chrome_options.add_argument('--disable-blink-features=AutomationControlled')
    chrome_options.add_argument('--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
    
    # Ajout de préférences expérimentales
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option('useAutomationExtension', False)
    
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=chrome_options)
    driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
    return driver

def get_instagram_bio(url):
    """Récupère la bio d'un post Instagram"""
    driver = setup_driver()
    try:
        logger.info(f"🔍 Recherche de la bio: {url}")
        
        # Charger la page
        driver.get(url)
        time.sleep(3)  # Attente initiale
        
        wait = WebDriverWait(driver, 10)
        
        # Différentes méthodes pour trouver la description
        methods = [
            # Méthode 1: Meta description
            lambda: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'meta[property="og:description"]'))).get_attribute('content'),
            
            # Méthode 2: Article text
            lambda: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'article'))).text,
            
            # Méthode 3: Span dans article
            lambda: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'article span'))).text,
            
            # Méthode 4: Div avec rôle de description
            lambda: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[role="menuitem"]'))).text,
            
            # Méthode 5: Balise meta spécifique
            lambda: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'meta[name="description"]'))).get_attribute('content'),
            
            # Méthode 6: Classes spécifiques Instagram
            lambda: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'span._aacl._aaco._aacu._aacx._aad7._aade'))).text,
        ]
        
        bio = None
        for method in methods:
            try:
                bio = method()
                if bio and len(bio.strip()) > 0:
                    logger.info(f"✅ Bio trouvée: {bio[:100]}...")
                    break
            except TimeoutException:
                continue
            except Exception as e:
                logger.debug(f"Erreur avec une méthode: {str(e)}")
                continue
        
        if not bio:
            logger.warning("❌ Bio non trouvée")
            return None
            
        return {
            'bio': bio,
            'url': url
        }
        
    except Exception as e:
        logger.error(f"❌ Erreur: {str(e)}")
        import traceback
        traceback.print_exc()
        return None
        
    finally:
        driver.quit()

if __name__ == "__main__":
    url = "https://www.instagram.com/reel/DMpc37-tJdF/"
    result = get_instagram_bio(url)
    
    if result:
        print("\n📊 Résultat:")
        print(json.dumps(result, indent=2, ensure_ascii=False))
