From 1f2cfe86d82adeae61c28bface58209f72d9a539 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 27 Oct 2025 01:12:41 -0700 Subject: [PATCH] Initial commit --- .gitattributes | 2 + site_list.txt | 15 + strip_hub/Untitled-1.html | 316 +++++++++++++++++++ strip_hub/crawlStriphub.py | 60 ++++ strip_hub/crawlStriphubtest1.py | 91 ++++++ strip_hub/crawlStriphubtest2.py | 137 ++++++++ strip_hub/debug_page.html | 1 + strip_hub/debug_page.png | Bin 0 -> 31419 bytes strip_hub/playwright_iframe_extract_debug.py | 137 ++++++++ strip_hub/test.py | 7 + strip_hub/uploadAbstream.py | 31 ++ strip_hub/uploadXpornium.py | 34 ++ wcr/.env | 8 + wcr/__pycache__/config.cpython-314.pyc | Bin 0 -> 1107 bytes wcr/__pycache__/xpornium.cpython-314.pyc | Bin 0 -> 2776 bytes wcr/config.py | 17 + wcr/crawl_wcr.py | 133 ++++++++ wcr/crawl_wcr2 | 208 ++++++++++++ wcr/xpornium.py | 78 +++++ 19 files changed, 1275 insertions(+) create mode 100644 .gitattributes create mode 100644 site_list.txt create mode 100644 strip_hub/Untitled-1.html create mode 100644 strip_hub/crawlStriphub.py create mode 100644 strip_hub/crawlStriphubtest1.py create mode 100644 strip_hub/crawlStriphubtest2.py create mode 100644 strip_hub/debug_page.html create mode 100644 strip_hub/debug_page.png create mode 100644 strip_hub/playwright_iframe_extract_debug.py create mode 100644 strip_hub/test.py create mode 100644 strip_hub/uploadAbstream.py create mode 100644 strip_hub/uploadXpornium.py create mode 100644 wcr/.env create mode 100644 wcr/__pycache__/config.cpython-314.pyc create mode 100644 wcr/__pycache__/xpornium.cpython-314.pyc create mode 100644 wcr/config.py create mode 100644 wcr/crawl_wcr.py create mode 100644 wcr/crawl_wcr2 create mode 100644 wcr/xpornium.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/site_list.txt b/site_list.txt new file mode 100644 index 0000000..0d3f822 --- /dev/null +++ b/site_list.txt @@ -0,0 +1,15 @@ + + +https://webcamrips.to/ +https://livecamrips.tv/ +https://www.showcamrips.com/ + +Same site but home page is unique https://8teen.cam/ +https://hdstream.ing/ +https://livecamrips1.com/ +https://allmy.cam/ +https://www.lovecamporn.com/ +https://camsmut.com/ +https://cumcams.cc/ +https://striphub.cam/ +https://chaturflix.cam/ \ No newline at end of file diff --git a/strip_hub/Untitled-1.html b/strip_hub/Untitled-1.html new file mode 100644 index 0000000..f7ab696 --- /dev/null +++ b/strip_hub/Untitled-1.html @@ -0,0 +1,316 @@ + + + + + + MiraVelle Stripchat recording at MiraVelle@2025-10-21-05-07.mp4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + Powered by + + recordjerk.cam + +
+ Contact + DMCA +
+
+
+
+ +

Icon for striphub.camstriphub.cam

Verifying you are human. This may take a few seconds.

striphub.cam needs to review the security of your connection before proceeding.
\ No newline at end of file diff --git a/strip_hub/debug_page.png b/strip_hub/debug_page.png new file mode 100644 index 0000000000000000000000000000000000000000..ecea46660bbcb819aca0afc459a0f35b8715ade0 GIT binary patch literal 31419 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

tqfbvA*9{gZqv5TVh>cuNyU_xs42j5`X$7GK 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 PFJWY0reAUE;fwzRhi$X@ literal 0 HcmV?d00001 diff --git a/strip_hub/playwright_iframe_extract_debug.py b/strip_hub/playwright_iframe_extract_debug.py new file mode 100644 index 0000000..86a7276 --- /dev/null +++ b/strip_hub/playwright_iframe_extract_debug.py @@ -0,0 +1,137 @@ +# playwright_iframe_extract_debug.py +from playwright.sync_api import sync_playwright +from bs4 import BeautifulSoup +import re, time, os, sys + +TEST_URL = "https://example.com/play/68f731ea62f66877cc80e54f" # replace if needed +MX_PATTERN = re.compile(r"https?://(?:www\.)?mxdrop\.to/e/[^\s\"'<>]+", re.I) + +def extract_from_html(html: str): + """Fallback regex scan over raw HTML (catches inline JS/JSON).""" + return set(MX_PATTERN.findall(html)) + +def run(): + found = set() + + with sync_playwright() as p: + # Use headless=False while debugging to *see* what's happening + browser = p.chromium.launch(headless=False, args=["--disable-blink-features=AutomationControlled"]) + context = browser.new_context( + user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + locale="en-US", + viewport={"width": 1280, "height": 900} + ) + page = context.new_page() + + # 1) Capture ANY network response hitting mxdrop + def on_response(resp): + url = resp.url + if "mxdrop.to/e/" in url: + print("[NET] mxdrop response:", url) + found.add(url) + page.on("response", on_response) + + print("Navigating to", TEST_URL) + page.goto(TEST_URL, wait_until="domcontentloaded", timeout=60000) + + # 2) Give the page time to settle network/XHR + try: + page.wait_for_load_state("networkidle", timeout=20000) + except Exception: + print("⚠️ networkidle timed out—continuing") + + # 3) Try a few generic clicks that often reveal the player/iframe + # (No-ops if not present; they just fail silently) + for sel in [ + 'button:has-text("Play")', + 'button:has-text("I understand")', + 'button:has-text("Continue")', + 'button:has-text("Accept")', + "#player, .video-player, .plyr__control", + ]: + try: + el = page.locator(sel) + if el.count() > 0: + el.first.click(timeout=2000) + except Exception: + pass + + # 4) Scroll to bottom to trigger lazy-load iframes + try: + page.evaluate(""" + const delay = ms => new Promise(r => setTimeout(r, ms)); + (async () => { + for (let y = 0; y < document.body.scrollHeight; y += 800) { + window.scrollTo(0, y); + await delay(200); + } + window.scrollTo(0, document.body.scrollHeight); + })(); + """) + time.sleep(1.0) + except Exception: + pass + + # 5) Dump a screenshot & HTML so you can inspect what loaded + try: + page.screenshot(path="debug_page.png", full_page=True) + print("Saved screenshot -> debug_page.png") + except Exception: + pass + + html = page.content() + with open("debug_page.html", "w", encoding="utf-8") as f: + f.write(html) + print("Saved HTML -> debug_page.html") + + # 6) Parse DOM for iframes (src and data-src) + soup = BeautifulSoup(html, "html.parser") + iframes = soup.find_all("iframe") + print(f"Found {len(iframes)}