Spaces:
Running
Running
| # scrape_ebay_offer.py | |
| import undetected_chromedriver as uc | |
| from selenium.webdriver.common.by import By | |
| from webdriver_manager.chrome import ChromeDriverManager | |
| from selenium.webdriver.chrome.service import Service | |
| import time | |
| import requests | |
| import os | |
| def scrape_ebay_offer(url: str): | |
| """Zwraca dane aukcji bez zapisywania na dysk""" | |
| print(f"🔍 eBay: {url}") | |
| options = uc.ChromeOptions() | |
| options.add_argument("--window-position=-3000,0") | |
| options.add_argument("--headless") | |
| options.add_argument("--no-sandbox") | |
| options.add_argument("--disable-dev-shm-usage") | |
| # Ustawienie binarki Chrome'a | |
| if os.path.exists('/usr/bin/google-chrome'): | |
| options.binary_location = '/usr/bin/google-chrome' | |
| driver = uc.Chrome( | |
| service=Service(ChromeDriverManager().install()), | |
| options=options, | |
| use_subprocess=True | |
| ) | |
| try: | |
| driver.get(url) | |
| time.sleep(4) | |
| # TITLE | |
| try: | |
| title_element = driver.find_element(By.CSS_SELECTOR, "h1.x-item-title__mainTitle") | |
| title_str = title_element.text.strip() | |
| except: | |
| title_str = "untitled_ebay" | |
| # PARAMETERS | |
| parameter_list = [] | |
| try: | |
| rows = driver.find_elements(By.CSS_SELECTOR, ".ux-labels-values") | |
| for row in rows: | |
| try: | |
| label = row.find_element(By.CSS_SELECTOR, ".ux-labels-values__labels").text.strip() | |
| value = row.find_element(By.CSS_SELECTOR, ".ux-labels-values__values").text.strip() | |
| if label and value: | |
| parameter_list.append(f"{label}: {value}") | |
| except: | |
| continue | |
| except: | |
| pass | |
| # DESCRIPTION | |
| description_content = "No description" | |
| try: | |
| frame = driver.find_element(By.ID, "desc_ifr") | |
| driver.switch_to.frame(frame) | |
| description_content = driver.find_element(By.TAG_NAME, "body").text.strip() | |
| driver.switch_to.default_content() | |
| except: | |
| pass | |
| # IMAGES | |
| unique_links = set() | |
| try: | |
| thumbnails = driver.find_elements(By.CSS_SELECTOR, ".ux-image-grid-item img") | |
| for img in thumbnails: | |
| src = img.get_attribute("src") or img.get_attribute("data-src") | |
| if src and "ebayimg.com" in src: | |
| # Zamień na HD | |
| hd_link = src.replace("/s-l64/", "/s-l1600").replace("/s-l140/", "/s-l1600") | |
| unique_links.add(hd_link) | |
| except: | |
| pass | |
| return { | |
| "platform": "ebay", | |
| "url": url, | |
| "title": title_str, | |
| "description": description_content, | |
| "parameters": parameter_list, | |
| "image_urls": list(unique_links) | |
| } | |
| finally: | |
| driver.quit() | |
| if __name__ == "__main__": | |
| url = input("eBay URL: ") | |
| result = scrape_ebay_offer(url) | |
| print(result) | |