From 0f6786b00a95be0dc10e3afc9a99e50db30a32bf Mon Sep 17 00:00:00 2001 From: jasonnugget Date: Tue, 6 Oct 2026 16:14:06 -0400 Subject: [PATCH] added shadertoy scraper --- bot/requirements.txt | 0 bot/scraper.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 bot/requirements.txt create mode 100644 bot/scraper.py diff --git a/bot/requirements.txt b/bot/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/bot/scraper.py b/bot/scraper.py new file mode 100644 index 0000000..921ced7 --- /dev/null +++ b/bot/scraper.py @@ -0,0 +1,36 @@ +from seleniumbase import SB + +def getFeaturedShader(): + with SB(browser="chrome", headless=False, uc=True) as sb: + # first loads the site and solves the cloudflare captcha + sb.uc_open_with_reconnect( + "https://www.shadertoy.com/", + reconnect_time=3 + ) + + if not sb.is_connected(): + sb.reconnect() + + sb.uc_gui_handle_captcha() + sb.sleep(10) + + # wait for the page to load + sb.wait_for_element(".shaderSmall", timeout=30) + + # grabs the first shader on featured shaders and its link + link_element = sb.find_element( + '.shaderSmall a[href^="/view/"]' + ) + + shader_link = link_element.get_attribute("href") + sb.open(shader_link) + + # fetches shader code + + sb.wait_for_element(".CodeMirror") + + shader_code = sb.execute_script(""" + return document.querySelector(".CodeMirror").CodeMirror.getValue(); + """) + + return shader_link, shader_code