from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os
import time
import requests

def download_images_from_frames(url, output_folder):
    # Creează folderul pentru salvarea imaginilor
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # Inițializează driverul WebDriver pentru Microsoft Edge
    options = webdriver.EdgeOptions()
    options.use_chromium = True
    driver = webdriver.Edge(options=options)
    driver.get(url)

    try:
        # Verifică dacă cadrul TOC_FRAME este disponibil
        print("Verific dacă cadrul TOC_FRAME este disponibil...")
        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "TOC_FRAME")))

        # Găsește toate linkurile din cadrul TOC_FRAME
        links = driver.find_elements(By.TAG_NAME, "a")
        print(f"Am găsit {len(links)} pagini în listă.")

        for idx, link in enumerate(links, start=1):
            print(f"Procesare link {idx}...")
            link.click()
            time.sleep(2)  # Așteaptă să se încarce imaginea

            # Comută pe cadrul principal VIEW_FRAME pentru a extrage imaginea
            driver.switch_to.default_content()
            print("Comut pe VIEW_FRAME...")
            WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "VIEW_FRAME")))

            # Găsește URL-ul imaginii
            try:
                img_tag = driver.find_element(By.TAG_NAME, "img")
                img_url = img_tag.get_attribute("src")
                print(f"URL-ul imaginii: {img_url}")

                # Adaugă extensia .jpg dacă lipsește
                if not img_url.endswith(".jpg"):
                    img_url += "&format=jpg"

                # Descarcă imaginea folosind requests
                img_data = requests.get(img_url).content
                file_name = os.path.join(output_folder, f"image_{idx}.jpg")
                with open(file_name, 'wb') as f:
                    f.write(img_data)

                print(f"Imagine descărcată: {file_name}")
            except Exception as e:
                print(f"Eroare la descărcarea imaginii: {e}")

            # Revino la cadrul TOC_FRAME pentru următorul link
            driver.switch_to.default_content()
            driver.switch_to.frame("TOC_FRAME")

    except Exception as e:
        print(f"Eroare: {e}")
        driver.execute_script("document.body.innerHTML = '<h1>Timeout</h1>';")

    finally:
        driver.quit()

if __name__ == "__main__":
    # URL-ul paginii principale
    url = "http://digitool.bibmet.ro:1801/view/action/nmets.do?DOCCHOICE=1632822.xml&dvs=1735187551882~406&locale=ro&search_terms=&adjacency=&VIEWER_URL=/view/action/nmets.do?&DELIVERY_RULE_ID=4&divType="

    # Numele folderului de ieșire
    output_folder = "images"

    # Rulează funcția de descărcare
    download_images_from_frames(url, output_folder)
