import json from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import TimeoutException, NoSuchElementException, WebDriverException from urllib.parse import urlparse, urlunparse def pobierz_dane(url): # Stałe ścieżki XPath do elementów xpath_nazwa = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/h1' xpath_obraz = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/img' xpath_kategoria = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/p[2]' xpath_cena = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div' xpath_media_spolecznosciowe = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[4]/div' xpath_link_do_narzedzia = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[5]/a' xpath_dodatkowa_wartosc = '//*[@id="what-is-tool"]/div[2]/div' xpath_opis_narzedzia = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/p[1]' # Konfiguracja przeglądarki options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-gpu') options.add_argument('--window-size=1920,1080') # Ścieżka do ChromeDriver chromedriver_path = "./chromedriver.exe" # Utwórz instancję przeglądarki service = Service(executable_path=chromedriver_path) try: with webdriver.Chrome(service=service, options=options) as driver: # Ustawienie timeoutów driver.set_page_load_timeout(3) driver.implicitly_wait(3) # Otwórz stronę driver.get(url) try: # Pobierz nazwę narzędzia z określonego XPath element_nazwa = driver.find_element(By.XPATH, xpath_nazwa) nazwa_narzedzia = element_nazwa.text # Pobierz adres URL obrazu z określonego XPath element_obraz = driver.find_element(By.XPATH, xpath_obraz) adres_obraz = element_obraz.get_attribute('src') # Pobierz kategorię z paragrafu element_kategoria = driver.find_element(By.XPATH, xpath_kategoria) wartosc_kategoria = element_kategoria.text # Przekształć kategorię na listę kategoria = [item.strip() for item in wartosc_kategoria.split(',')] # Pobierz cenę ze ścieżki XPath element_cena = driver.find_element(By.XPATH, xpath_cena) wartosc_cena = element_cena.text # Przekształć cenę na listę cena = [item.strip() for item in wartosc_cena.split(',')] # Pobierz wszystkie linki do mediów społecznościowych z określonego XPath element_media_spolecznosciowe = driver.find_element(By.XPATH, xpath_media_spolecznosciowe) linki = element_media_spolecznosciowe.find_elements(By.TAG_NAME, 'a') media_spolecznosciowe = [link.get_attribute('href') for link in linki if link.get_attribute('href')] # Pobierz adres URL z elementu określonego XPath bez parametrów element_link_do_narzedzia = driver.find_element(By.XPATH, xpath_link_do_narzedzia) url_bez_parametru = element_link_do_narzedzia.get_attribute('href') # Usuń dodatkowe parametry z URL parsed_url = urlparse(url_bez_parametru) link_do_narzedzia = urlunparse(parsed_url._replace(query="", params="", fragment="")) # Pobierz wartość z dodatkowej ścieżki XPath element_dodatkowa_wartosc = driver.find_element(By.XPATH, xpath_dodatkowa_wartosc) dodatkowa_wartosc = element_dodatkowa_wartosc.text # Pobierz opis narzędzia z określonego XPath element_opis_narzedzia = driver.find_element(By.XPATH, xpath_opis_narzedzia) opis_narzedzia = element_opis_narzedzia.text # Zbuduj wynikowy JSON result = { "nazwa_narzedzia": nazwa_narzedzia, "obraz_url": adres_obraz, "kategoria": kategoria, "cena": cena, "media_spolecznosciowe": media_spolecznosciowe, "link_do_narzedzia": link_do_narzedzia, "dodatkowa_wartosc": dodatkowa_wartosc, "opis_narzedzia": opis_narzedzia } return result except NoSuchElementException: print(f"Element nie został znaleziony dla jednej z podanych ścieżek XPath.") return None except TimeoutException: print("Czas ładowania strony został przekroczony.") return None except WebDriverException as e: print(f"Wystąpił błąd związany z WebDriverem: {e}") return None except Exception as e: print(f"Wystąpił błąd: {e}") return None # Przykładowe użycie funkcji url = "https://www.futurepedia.io/tool/agentverse" result = pobierz_dane(url) # Wyświetl pobrane dane w formacie JSON if result: print(json.dumps(result, indent=2)) else: print("Nie udało się pobrać danych.")