From 29bac99359f9bc13b1cf7b017c1d1ba2e4013f0a Mon Sep 17 00:00:00 2001 From: nosch Date: Fri, 27 Feb 2026 10:02:11 +0100 Subject: [PATCH] steamrip scrapes downloadlinks for the provider - steamrip connection --- .gitignore | 3 +- .../{providers => provider}/buzzheavier.py | 0 .../{providers => provider}/gofile.py | 0 src/core/data/scrapers/provider/megadb.py | 32 +++++++++++++++ .../{providers => provider}/vikingfile.py | 0 src/core/data/scrapers/steamrip.py | 39 +++++++++++++++++-- 6 files changed, 70 insertions(+), 4 deletions(-) rename src/core/data/scrapers/{providers => provider}/buzzheavier.py (100%) rename src/core/data/scrapers/{providers => provider}/gofile.py (100%) create mode 100644 src/core/data/scrapers/provider/megadb.py rename src/core/data/scrapers/{providers => provider}/vikingfile.py (100%) diff --git a/.gitignore b/.gitignore index 49b53dc..6f64177 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Created by venv; see https://docs.python.org/3/library/venv.html -* +__pycache__/ +*.exe diff --git a/src/core/data/scrapers/providers/buzzheavier.py b/src/core/data/scrapers/provider/buzzheavier.py similarity index 100% rename from src/core/data/scrapers/providers/buzzheavier.py rename to src/core/data/scrapers/provider/buzzheavier.py diff --git a/src/core/data/scrapers/providers/gofile.py b/src/core/data/scrapers/provider/gofile.py similarity index 100% rename from src/core/data/scrapers/providers/gofile.py rename to src/core/data/scrapers/provider/gofile.py diff --git a/src/core/data/scrapers/provider/megadb.py b/src/core/data/scrapers/provider/megadb.py new file mode 100644 index 0000000..decaa4e --- /dev/null +++ b/src/core/data/scrapers/provider/megadb.py @@ -0,0 +1,32 @@ +import undetected_chromedriver as uc +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 + + +options = uc.ChromeOptions() +options.set_capability("goog:loggingPrefs", {"performance": "ALL"}) + +driver = uc.Chrome(options=options) +driver.get("https://megadb.net/qp0yi1v1p6nl") + +WebDriverWait(driver, 20).until( + EC.frame_to_be_available_and_switch_to_it( + (By.XPATH, "//iframe[@title='reCAPTCHA']") + ) +) + +checkboxui = WebDriverWait(driver, 20).until( + EC.presence_of_element_located((By.ID, "recaptcha-anchor")) +) + +checkboxelement = driver.find_element(By.ID, "recaptcha-anchor") + +while checkboxelement.get_attribute("aria-checked") == "false": + time.sleep(1) + +print("captcha is solved") + +driver.quit() \ No newline at end of file diff --git a/src/core/data/scrapers/providers/vikingfile.py b/src/core/data/scrapers/provider/vikingfile.py similarity index 100% rename from src/core/data/scrapers/providers/vikingfile.py rename to src/core/data/scrapers/provider/vikingfile.py diff --git a/src/core/data/scrapers/steamrip.py b/src/core/data/scrapers/steamrip.py index ab52afb..089b95b 100644 --- a/src/core/data/scrapers/steamrip.py +++ b/src/core/data/scrapers/steamrip.py @@ -20,9 +20,9 @@ def scrape_steamrip_links(text = None): names = [] for gamehtml in games: link = gamehtml.find("a", href=lambda x: x and x.startswith("/")) - links += re.findall('(?<=href=")[^"]*', link.__str__()) + links += re.findall(r'(?<=href=")[^"]*', link.__str__()) name = gamehtml.find("a", href=lambda x: x and x.startswith("/")) - names += re.findall('(?<=\/">)[^<]*', name.__str__()) + names += re.findall(r'(?<=\/">)[^<]*', name.__str__()) @@ -42,5 +42,38 @@ def offline_scrape_steamrip_links(): return scrape_steamrip_links(text) +def scrape_steamrip_game_downloads(gamelink): + url = "https://steamrip.com" + gamelink + response = requests.get(url) + + soup = BeautifulSoup(response.text, "html.parser") + + download_link_elements = soup.find_all("a",class_="shortc-button") + + download_links = ["b", "g", "v", "m"] + + for download_link in download_link_elements: + pure = download_link.attrs.get("href") + if pure[2] == "b": + download_links[0] = "https:" + pure + if pure[2] == "g": + download_links[1] = "https:" + pure + if pure[2] == "v": + download_links[2] = "https:" + pure + if pure[2] == "m": + download_links[3] = "https:" + pure + + ret = [] + + for link in download_links: + if len(link) != 1: + ret.append(link) + + + + return ret + + if __name__ == "__main__": - print(offline_scrape_steamrip_links()) \ No newline at end of file + #print(offline_scrape_steamrip_links()) + print(scrape_steamrip_game_downloads("/r-e-p-o-free-download/")) \ No newline at end of file