by Jan Biniok

"Userscripts | Tampermonkey." *www.tampermonkey.net*, https://www.tampermonkey.net/scripts.php. Accessed 20 Apr. 2026.

(n.d.). *Userscripts | Tampermonkey*. https://www.tampermonkey.net/scripts.php


Userscript.Zone Search


Userscript.Zone Search is a website that allows searching for userscripts by entering a matching URL or domain.


Many scripts


It is very easy to find matching userscripts


Only user scripts from moderated userscript pages or at least pages with a comment function are displayed


GreasyFork


GreasyFork is maybe the most popular userscript hoster. It has many scripts in its inventory and is created by Jason Barnabe, the author of Stylish.


Features like script sync from Github


A very active open source development


OpenUserJS


OpenUserJS started right after GreasyFork. It is created by Sizzle McTwizzle and has a lot of scripts in its inventory.


Features like script sync from Github, fork scripts, ...


Open source development


GitHub/Gist


You can search Github and Gist for scripts and install them by a click at the Raw button.


Raw


Imprint


Privacy Policy


Cookie Settings


Tampermonkey


Stylish


open source development


search Github and Gist


Download Now

"Pastebin.com - #1 paste tool since 2002!." *Pastebin*, https://pastebin.com/. Accessed 20 Apr. 2026.

Pastebin. (n.d.). *Pastebin.com - #1 paste tool since 2002!*. Pastebin. https://pastebin.com/


Install Free


Prom Search


Syntax Highlighting


Category:


Tags:


Syntax Highlighting:


Paste Expiration:


Never


Paste Exposure:


Public


Folder:


No Folder Selected


PasswordNEW


NEW


Disabled


Burn after read


Paste Name / Title:


Paste as a guest


Pastebin


Install


New Paste


Optional Paste Settings


Create New Paste


create new paste


syntax languages


archive


faq


tools


night mode


api


scraping api


news


pro


privacy statement


cookies policy


terms of service


security disclosure


dmca


report abuse


contact


This website utilizes technologies such as cookies to enable essential site functionality, as well as for analytics, personalization, and targeted advertising. To learn more, view the following link:

eGifter. "Online Gift Cards, Visa & Group Gifting | eGifter." *eGifter*, https://www.egifter.com/en-ca/. Accessed 20 Apr. 2026.

eGifter. (n.d.). *Online Gift Cards, Visa & Group Gifting | eGifter*. https://www.egifter.com/en-ca/


TOGGLE MENU


Buy Gift Cards


Buy With Bitcoin


Buy For Business


Merchant Solutions


Canada CANADA


Canada


CANADA


EN ENGLISH


ENGLISH


Sign In


0 ITEMS IN CART


Buy and Send Gift Cards Instantly


Buy and personalize premium gift cards. Send by email, text, or hand deliver.


PERSONAL BUSINESS


PERSONAL


BUSINESS


PERSONAL Buy for self or send to a friend. BUSINESS Buy gift cards in bulk for rewards & incentives.


Buy for self or send to a friend.


Buy gift cards in bulk for rewards & incentives.


Create with AI Try our AI image generator for a one-of-a-kind design NEW: AI Image Generator! Create out-of-this-world images to bring your imagination—and your gifts—to life. Select a gift card and choose, Send To A Friend to use the image generator. GET STARTED


Create with AI


Try our AI image generator for a one-of-a-kind design


NEW: AI Image Generator!


Create out-of-this-world images to bring your imagination—and your gifts—to life. Select a gift card and choose, Send To A Friend to use the image generator.


Send To A Friend


GET STARTED


Shop from Hundreds of Gift Cards Buy, Send & Claim Gift Cards. Chip in with Friends. Store & Manage Gift Cards. Air Canada Ardene Cineplex DoorDash Reitmans RCL Card Uber The Ultimate Dining Card Wayfair SHOP ALL GIFT CARDS


Shop from Hundreds of Gift Cards


Buy, Send & Claim Gift Cards. Chip in with Friends. Store & Manage Gift Cards.


Air Canada


Ardene


Cineplex


DoorDash


Reitmans RCL Card


Uber


The Ultimate Dining Card


Wayfair


SHOP ALL GIFT CARDS


The Gift Card Rewards Program that has it all, try eGifter Rewards™ Order gift cards for employees with no minimums or long-term commitment. START TODAY


The Gift Card Rewards Program that has it all, try eGifter Rewards™


Order gift cards for employees with no minimums or long-term commitment.


START TODAY


Earn eGifter Points with your Purchases Save money with eGifter Points when you buy Gift Cards at eGifter EARN POINTS Buy Gift Cards with Bitcoin Shop from 300+ Brands Using Bitcoin | No Additional Fees with Bitcoin | Use Bitcoin to Earn Extra Points SHOP NOW The Digital Gift With Endless Possibilities Vanilla® eGift Visa® is Now Available at eGifter! BUY NOW Print Your Gift Card at Home The convenience of a digital card with the personal touch of hand delivery Your gift will be instantly sent to you as a .PDF! Print it out at home, then fold it like any greeting card! Hand it to your recipient to see their surprise in person SHOP NOW


Earn eGifter Points with your Purchases


Save money with eGifter Points when you buy Gift Cards at eGifter


EARN POINTS


Buy Gift Cards with Bitcoin


Shop from 300+ Brands Using Bitcoin | No Additional Fees with Bitcoin | Use Bitcoin to Earn Extra Points


SHOP NOW


The Digital Gift With Endless Possibilities


Vanilla® eGift Visa® is Now Available at eGifter!


BUY NOW


Print Your Gift Card at Home


The convenience of a digital card with the personal touch of hand delivery


Your gift will be instantly sent to you as a .PDF!


Print it out at home, then fold it like any greeting card!


Hand it to your recipient to see their surprise in person


Featured In


Be an eGifter Insider — Never Miss a Deal! Get early access to gift card sales and bonus point offers First Name (Optional) Email By entering my email above, I agree to receive information about gift card promotions, deals and marketing messages from eGifter. I can unsubscribe at any time. I'M IN!


Be an eGifter Insider — Never Miss a Deal!


Get early access to gift card sales and bonus point offers


First Name (Optional)


Email


By entering my email above, I agree to receive information about gift card promotions, deals and marketing messages from eGifter. I can unsubscribe at any time.


I'M IN!


eGifter in Canada accepts


For Consumers


Buy Gift Cards Last Minute Gifts Earn Points Check Gift Card Balance


Last Minute Gifts


Earn Points


Check Gift Card Balance


Payment Options


Buy with Credit Cards Buy with PayPal Buy with Google Pay Buy with Apple Pay Buy with Bitcoin Buy with Bitcoin Cash Buy with Litecoin Buy with Ethereum Buy with Dogecoin Buy with Shiba Inu Buy with other Cryptocurrencies


Buy with Credit Cards


Buy with PayPal


Buy with Google Pay


Buy with Apple Pay


Buy with Bitcoin


Buy with Bitcoin Cash


Buy with Litecoin


Buy with Ethereum


Buy with Dogecoin


Buy with Shiba Inu


Buy with other Cryptocurrencies


For Business


Contact Sales Buy in Bulk Rewards & Incentives eGift Card API Platform Features Clients eGifter Rewards Choice Card™


Contact Sales


Buy in Bulk


Rewards & Incentives


eGift Card API


Platform


Features


Clients


eGifter Rewards Choice Card™


Company


Press In the News eGifter Stories Blog Careers


Press


In the News


eGifter Stories Blog


Careers


Support


Order Status Help Center Contact Support Cookie Preferences


Order Status


Help Center


Contact Support


Cookie Preferences


Got Gift? Connect with us! Gift on the go with the eGifter app!


Got Gift? Connect with us!


Gift on the go with the eGifter app!


Terms of Service


Site Map


© 2011 - 2026 eGifter.com. All Rights Reserved.


All Rights Reserved.


Manage Preferences


eGifter Rewards™


Scrape-Giftcards

"Scrape-Giftcards - Pastebin.com." *Pastebin*, https://pastebin.com/5gbedVh0. Accessed 20 Apr. 2026.

Pastebin. (n.d.). *Scrape-Giftcards - Pastebin.com*. Pastebin. https://pastebin.com/5gbedVh0


OCT 9TH, 2025


| None


#!/usr/bin/env python3


Targeted HTML Gift Card Scraper for GCX


Extracts card value, discount, and your price using specific CSS classes


import time


import re


import logging


import pandas as pd


from typing import List, Dict


from selenium import webdriver


from selenium.webdriver.chrome.options import Options


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, NoSuchElementException


from bs4 import BeautifulSoup


# Set up logging


logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


logger = logging.getLogger(__name__)


class TargetedHTMLGiftCardScraper:


def __init__(self, headless: bool = False):


self.headless = headless


self.driver = None


self.all_gift_cards = []


self.base_url = "https://gcx.raise.com/buy-gift-cards"


def setup_driver(self):


"""Set up Chrome driver with appropriate options"""


chrome_options = Options()


if self.headless:


chrome_options.add_argument('--headless')


# Options to avoid detection


chrome_options.add_argument('--no-sandbox')


chrome_options.add_argument('--disable-dev-shm-usage')


chrome_options.add_argument('--disable-blink-features=AutomationControlled')


chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])


chrome_options.add_experimental_option('useAutomationExtension', False)


chrome_options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')


chrome_options.add_argument('--window-size=1920,1080')


try:


self.driver = webdriver.Chrome(options=chrome_options)


self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")


return True


except Exception as e:


logger.error(f"Failed to setup Chrome driver: {e}")


return False


def navigate_to_first_page(self):


"""Navigate to the first page of GCX gift cards"""


logger.info(f"Navigating to first page: {self.base_url}")


# Wait for page to load completely


WebDriverWait(self.driver, 20).until(


EC.presence_of_element_located((By.TAG_NAME, "body"))


# Wait for gift card content to load


WebDriverWait(self.driver, 10).until(


EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'Gift Cards')]"))


except TimeoutException:


logger.warning("Gift card content not found, continuing anyway")


# Additional wait for dynamic content


logger.error(f"Error navigating to first page: {e}")


def scroll_and_load_content(self):


"""Scroll the page to load all dynamic content"""


# Get initial page height


last_height = self.driver.execute_script("return document.body.scrollHeight")


# Scroll down gradually


scroll_pause_time = 2


scroll_attempts = 0


max_scroll_attempts = 5


while scroll_attempts < max_scroll_attempts:


# Scroll down to bottom


self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")


# Wait to load page


# Calculate new scroll height and compare with last scroll height


new_height = self.driver.execute_script("return document.body.scrollHeight")


if new_height == last_height:


break


last_height = new_height


scroll_attempts += 1


# Scroll back to top


self.driver.execute_script("window.scrollTo(0, 0);")


logger.warning(f"Error during scrolling: {e}")


def extract_gift_card_links_from_first_page(self) -> List[str]:


"""Extract gift card links from the first page only"""


links = []


# Get page source and parse with BeautifulSoup


soup = BeautifulSoup(self.driver.page_source, 'html.parser')


# Look for gift card links - more specific selectors


gift_card_links = soup.find_all('a', href=True)


for link in gift_card_links:


href = link.get('href', '')


text = link.get_text(strip=True)


# Check if this is a gift card link


if 'buy-' in href and 'gift-cards' in href and 'Gift Cards' in text:


# Make sure it's a full URL


if href.startswith('/'):


full_url = f"https://gcx.raise.com{href}"


elif href.startswith('http'):


full_url = href


else:


continue


# Extract brand name from text


brand = self.clean_brand_name(text)


if brand and brand not in [card.get('Brand', '') for card in self.all_gift_cards]:


logger.info(f"Found {len(links)} gift card links on first page")


return links


logger.error(f"Error extracting links from first page: {e}")


return []


def clean_brand_name(self, text: str) -> str:


"""Clean brand name from link text"""


# Remove "Buy Gift Card" prefix


brand = re.sub(r'^Buy Gift Card\s+', '', text, flags=re.IGNORECASE)


# Remove "Gift Cards" suffix


brand = re.sub(r'\s+Gift Cards?.*$', '', brand, flags=re.IGNORECASE)


# Clean up extra spaces and special characters


brand = re.sub(r'\s+', ' ', brand).strip()


return brand


def scrape_individual_gift_card_page(self, url: str) -> List[Dict]:


"""Scrape individual gift card page using specific CSS classes"""


logger.info(f"Scraping individual gift card page: {url}")


self.driver.get(url)


# Wait for page to load


WebDriverWait(self.driver, 15).until(


# Get page source and parse


# Extract brand name from URL


brand = self.extract_brand_from_url(url)


# Extract gift card details using specific CSS classes


gift_cards = self.extract_gift_cards_with_css_classes(soup, brand)


return gift_cards


logger.error(f"Error scraping individual gift card page {url}: {e}")


def extract_brand_from_url(self, url: str) -> str:


"""Extract brand name from URL"""


# Extract brand from URL like "buy-netflix-gift-cards"


if 'buy-' in url and '-gift-cards' in url:


brand_part = url.split('buy-')[1].split('-gift-cards')[0]


# Convert to proper case


brand = brand_part.replace('-', ' ').title()


return "Unknown Brand"


except:


def extract_gift_cards_with_css_classes(self, soup: BeautifulSoup, brand: str) -> List[Dict]:


"""Extract gift cards using the specific CSS classes provided"""


gift_cards = []


# Look for the specific CSS classes from the HTML structure provided


# grouped-listing_listingRow__T3MMf - the main row container


# grouped-listing_value__38ZMD - contains the card value and your price


# grouped-listing_discount__2aokP - contains the discount percentage


# Find all rows with the specific class


listing_rows = soup.find_all('div', class_=re.compile(r'grouped-listing_listingRow__'))


for row in listing_rows:


# Extract card value (first grouped-listing_value__38ZMD)


value_elements = row.find_all('div', class_=re.compile(r'grouped-listing_value__'))


if len(value_elements) >= 2:


card_value = value_elements[0].get_text(strip=True)


your_price = value_elements[1].get_text(strip=True)


# Extract discount percentage


discount_element = row.find('div', class_=re.compile(r'grouped-listing_discount__'))


if discount_element:


discount_text = discount_element.get_text(strip=True)


# Extract just the percentage number


discount_match = re.search(r'(\d+(?:\.\d+)?)', discount_text)


if discount_match:


discount = discount_match.group(1)


# Clean up the values


card_value = card_value.replace('$', '').strip()


your_price = your_price.replace('$', '').strip()


'Brand': brand,


'Card_Value': f"${card_value}",


'Discount': f"{discount}%",


'Your_Price': f"${your_price}"


logger.warning(f"Error processing row: {e}")


# Alternative method: Look for the specific class patterns in the entire page


if not gift_cards:


# Find all elements with the value class


value_elements = soup.find_all('div', class_=re.compile(r'grouped-listing_value__'))


discount_elements = soup.find_all('div', class_=re.compile(r'grouped-listing_discount__'))


# Try to pair them up


for i in range(0, len(value_elements), 2):


if i + 1 < len(value_elements):


card_value = value_elements[i].get_text(strip=True)


your_price = value_elements[i + 1].get_text(strip=True)


# Find the closest discount element


if discount_elements:


discount_text = discount_elements[i // 2].get_text(strip=True) if i // 2 < len(discount_elements) else "0%"


# Method 3: Look for the specific HTML structure pattern


# Look for the exact pattern from the provided HTML


page_text = soup.get_text()


# Pattern: $200.00, 2.00% OFF, $196.00


pattern = r'\$(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)%\s*OFF\s*,\s*\$(\d+(?:\.\d+)?)'


matches = re.findall(pattern, page_text)


for card_value, discount, your_price in matches:


# Method 4: Look for any elements containing the specific class names


# Find all elements with the specific class patterns


all_elements = soup.find_all('div', class_=re.compile(r'grouped-listing_'))


values = []


discounts = []


for element in all_elements:


class_name = element.get('class', [])


if any('value__' in cls for cls in class_name):


values.append(element.get_text(strip=True))


elif any('discount__' in cls for cls in class_name):


discounts.append(element.get_text(strip=True))


# Pair them up


for i in range(0, len(values), 2):


if i + 1 < len(values) and i // 2 < len(discounts):


card_value = values[i].replace('$', '').strip()


your_price = values[i + 1].replace('$', '').strip()


discount_text = discounts[i // 2]


# Remove duplicates


seen = set()


unique_gift_cards = []


for card in gift_cards:


key = (card['Brand'], card['Card_Value'], card['Your_Price'])


if key not in seen:


seen.add(key)


logger.info(f"Extracted {len(unique_gift_cards)} gift card variations for {brand}")


return unique_gift_cards


logger.error(f"Error extracting gift card details: {e}")


def scrape_first_page_only(self) -> List[Dict]:


"""Scrape only the first page and follow each gift card link for accurate information"""


if not self.setup_driver():


# Navigate to first page


if not self.navigate_to_first_page():


logger.error("Failed to navigate to first page")


# Scroll to load content


# Extract gift card links from first page


gift_card_links = self.extract_gift_card_links_from_first_page()


if gift_card_links:


logger.info(f"Found {len(gift_card_links)} gift card links on first page")


# Follow each gift card link


gift_cards = self.scrape_individual_gift_card_page(link)


if gift_cards:


logger.info(f"Added {len(gift_cards)} gift cards from {link}")


# Be respectful with delays


logger.error(f"Error processing link {link}: {e}")


logger.warning("No gift card links found on first page")


return self.all_gift_cards


logger.error(f"Error during scraping: {e}")


finally:


if self.driver:


self.driver.quit()


def save_data(self, gift_cards: List[Dict], csv_filename: str = "gcx_targeted_html_gift_cards.csv", excel_filename: str = "gcx_targeted_html_gift_cards.xlsx"):


"""Save scraped data to CSV and Excel files"""


logger.warning("No data to save")


return None


# Create DataFrame


df = pd.DataFrame(gift_cards)


# Remove duplicates based on brand name, card value, and your price


df = df.drop_duplicates(subset=['Brand', 'Card_Value', 'Your_Price'], keep='first')


# Sort by Brand name, then by Card Value


df = df.sort_values(['Brand', 'Card_Value'], ascending=[True, True])


# Save to CSV


df.to_csv(csv_filename, index=False)


logger.info(f"Saved {len(df)} gift cards to {csv_filename}")


# Save to Excel


df.to_excel(excel_filename, index=False, engine='openpyxl')


logger.info(f"Saved {len(df)} gift cards to {excel_filename}")


return df


def analyze_results(self, gift_cards: List[Dict]):


"""Analyze the scraped results"""


return


print(f"\n" + "="*80)


print("TARGETED HTML GIFT CARD SCRAPING RESULTS")


print(f"Total gift cards scraped: {len(gift_cards)}")


# Show first 30


print(f"\nFirst 30 gift cards:")


print("-" * 100)


print(f"{'Rank':<4} {'Brand':<25} {'Card Value':<12} {'Discount':<10} {'Your Price':<12}")


for i, card in enumerate(gift_cards[:30], 1):


print(f"{i:<4} {card['Brand']:<25} {card['Card_Value']:<12} {card['Discount']:<10} {card['Your_Price']:<12}")


# Show summary by brand


brand_summary = df.groupby('Brand').agg({


'Card_Value': 'count',


'Discount': lambda x: f"{x.iloc[0]}" if len(x) > 0 else "N/A"


}).rename(columns={'Card_Value': 'Card_Count'})


print(f"\nSummary by Brand:")


print("-" * 70)


print(f"{'Brand':<25} {'Cards':<10} {'Sample Discount':<15}")


for brand, row in brand_summary.iterrows():


print(f"{brand:<25} {row['Card_Count']:<10} {row['Discount']:<15}")


# Show examples of different prices for the same brand


print(f"\nExamples of different prices for the same brand:")


print("-" * 80)


for brand in df['Brand'].unique()[:5]: # Show first 5 brands


brand_cards = df[df['Brand'] == brand]


if len(brand_cards) > 1:


print(f"\n{brand}:")


for _, card in brand_cards.head(5).iterrows():


print(f" {card['Card_Value']} - {card['Discount']} - You pay {card['Your_Price']}")


def main():


"""Main function"""


logger.info("Starting targeted HTML gift card scraper for GCX...")


# Try with visible browser first (better for debugging)


scraper = TargetedHTMLGiftCardScraper(headless=False)


gift_cards = scraper.scrape_first_page_only()


logger.info(f"Successfully scraped {len(gift_cards)} gift cards from first page")


# Save data


df = scraper.save_data(gift_cards)


# Analyze results


print(f"\nData saved to:")


print(f"- gcx_targeted_html_gift_cards.csv")


print(f"- gcx_targeted_html_gift_cards.xlsx")


print(f"\nFormat: Brand | Card Value | Discount | Your Price")


print(f"Where:")


print(f"- Brand: Company name")


print(f"- Card Value: Original gift card value (e.g., $5, $10, $25, $50, $100)")


print(f"- Discount: Discount percentage for that specific amount")


print(f"- Your Price: Actual price you pay for the gift card")


logger.error("No gift cards found")


print("\nNo gift cards found. This could be due to:")


print("1. Website structure changes")


print("2. Anti-bot protection")


print("3. Network issues")


print("4. Chrome driver not installed")


if __name__ == "__main__":


main()


jedtony


Add comment


copy


raw


download


report


RAW Paste Data


#!/usr/bin/env python3 """ Targeted HTML Gift Card Scraper for GCX Extracts card value, discount, and your price using specific CSS classes """ import time import re import logging import pandas as pd from typing import List, Dict from selenium import webdriver from selenium.webdriver.chrome.options import Options 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, NoSuchElementException from bs4 import BeautifulSoup # Set up logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) class TargetedHTMLGiftCardScraper: def __init__(self, headless: bool = False): self.headless = headless self.driver = None self.all_gift_cards = [] self.base_url = "https://gcx.raise.com/buy-gift-cards" def setup_driver(self): """Set up Chrome driver with appropriate options""" chrome_options = Options() if self.headless: chrome_options.add_argument('--headless') # Options to avoid detection chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-blink-features=AutomationControlled') chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36') chrome_options.add_argument('--window-size=1920,1080') try: self.driver = webdriver.Chrome(options=chrome_options) self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") return True except Exception as e: logger.error(f"Failed to setup Chrome driver: {e}") return False def navigate_to_first_page(self): """Navigate to the first page of GCX gift cards""" try: logger.info(f"Navigating to first page: {self.base_url}") self.driver.get(self.base_url) # Wait for page to load completely WebDriverWait(self.driver, 20).until( EC.presence_of_element_located((By.TAG_NAME, "body")) ) # Wait for gift card content to load try: WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'Gift Cards')]")) ) except TimeoutException: logger.warning("Gift card content not found, continuing anyway") # Additional wait for dynamic content time.sleep(3) return True except Exception as e: logger.error(f"Error navigating to first page: {e}") return False def scroll_and_load_content(self): """Scroll the page to load all dynamic content""" try: # Get initial page height last_height = self.driver.execute_script("return document.body.scrollHeight") # Scroll down gradually scroll_pause_time = 2 scroll_attempts = 0 max_scroll_attempts = 5 while scroll_attempts < max_scroll_attempts: # Scroll down to bottom self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Wait to load page time.sleep(scroll_pause_time) # Calculate new scroll height and compare with last scroll height new_height = self.driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height scroll_attempts += 1 # Scroll back to top self.driver.execute_script("window.scrollTo(0, 0);") time.sleep(1) except Exception as e: logger.warning(f"Error during scrolling: {e}") def extract_gift_card_links_from_first_page(self) -> List[str]: """Extract gift card links from the first page only""" links = [] try: # Get page source and parse with BeautifulSoup soup = BeautifulSoup(self.driver.page_source, 'html.parser') # Look for gift card links - more specific selectors gift_card_links = soup.find_all('a', href=True) for link in gift_card_links: href = link.get('href', '') text = link.get_text(strip=True) # Check if this is a gift card link if 'buy-' in href and 'gift-cards' in href and 'Gift Cards' in text: # Make sure it's a full URL if href.startswith('/'): full_url = f"https://gcx.raise.com{href}" elif href.startswith('http'): full_url = href else: continue # Extract brand name from text brand = self.clean_brand_name(text) if brand and brand not in [card.get('Brand', '') for card in self.all_gift_cards]: links.append(full_url) logger.info(f"Found {len(links)} gift card links on first page") return links except Exception as e: logger.error(f"Error extracting links from first page: {e}") return [] def clean_brand_name(self, text: str) -> str: """Clean brand name from link text""" # Remove "Buy Gift Card" prefix brand = re.sub(r'^Buy Gift Card\s+', '', text, flags=re.IGNORECASE) # Remove "Gift Cards" suffix brand = re.sub(r'\s+Gift Cards?.*$', '', brand, flags=re.IGNORECASE) # Clean up extra spaces and special characters brand = re.sub(r'\s+', ' ', brand).strip() return brand def scrape_individual_gift_card_page(self, url: str) -> List[Dict]: """Scrape individual gift card page using specific CSS classes""" try: logger.info(f"Scraping individual gift card page: {url}") self.driver.get(url) # Wait for page to load WebDriverWait(self.driver, 15).until( EC.presence_of_element_located((By.TAG_NAME, "body")) ) # Additional wait for dynamic content time.sleep(3) # Get page source and parse soup = BeautifulSoup(self.driver.page_source, 'html.parser') # Extract brand name from URL brand = self.extract_brand_from_url(url) # Extract gift card details using specific CSS classes gift_cards = self.extract_gift_cards_with_css_classes(soup, brand) return gift_cards except Exception as e: logger.error(f"Error scraping individual gift card page {url}: {e}") return [] def extract_brand_from_url(self, url: str) -> str: """Extract brand name from URL""" try: # Extract brand from URL like "buy-netflix-gift-cards" if 'buy-' in url and '-gift-cards' in url: brand_part = url.split('buy-')[1].split('-gift-cards')[0] # Convert to proper case brand = brand_part.replace('-', ' ').title() return brand return "Unknown Brand" except: return "Unknown Brand" def extract_gift_cards_with_css_classes(self, soup: BeautifulSoup, brand: str) -> List[Dict]: """Extract gift cards using the specific CSS classes provided""" gift_cards = [] try: # Look for the specific CSS classes from the HTML structure provided # grouped-listing_listingRow__T3MMf - the main row container # grouped-listing_value__38ZMD - contains the card value and your price # grouped-listing_discount__2aokP - contains the discount percentage # Find all rows with the specific class listing_rows = soup.find_all('div', class_=re.compile(r'grouped-listing_listingRow__')) for row in listing_rows: try: # Extract card value (first grouped-listing_value__38ZMD) value_elements = row.find_all('div', class_=re.compile(r'grouped-listing_value__')) if len(value_elements) >= 2: card_value = value_elements[0].get_text(strip=True) your_price = value_elements[1].get_text(strip=True) else: continue # Extract discount percentage discount_element = row.find('div', class_=re.compile(r'grouped-listing_discount__')) if discount_element: discount_text = discount_element.get_text(strip=True) # Extract just the percentage number discount_match = re.search(r'(\d+(?:\.\d+)?)', discount_text) if discount_match: discount = discount_match.group(1) else: continue else: continue # Clean up the values card_value = card_value.replace('$', '').strip() your_price = your_price.replace('$', '').strip() gift_cards.append({ 'Brand': brand, 'Card_Value': f"${card_value}", 'Discount': f"{discount}%", 'Your_Price': f"${your_price}" }) except Exception as e: logger.warning(f"Error processing row: {e}") continue # Alternative method: Look for the specific class patterns in the entire page if not gift_cards: # Find all elements with the value class value_elements = soup.find_all('div', class_=re.compile(r'grouped-listing_value__')) discount_elements = soup.find_all('div', class_=re.compile(r'grouped-listing_discount__')) # Try to pair them up for i in range(0, len(value_elements), 2): if i + 1 < len(value_elements): card_value = value_elements[i].get_text(strip=True) your_price = value_elements[i + 1].get_text(strip=True) # Find the closest discount element if discount_elements: discount_text = discount_elements[i // 2].get_text(strip=True) if i // 2 < len(discount_elements) else "0%" discount_match = re.search(r'(\d+(?:\.\d+)?)', discount_text) if discount_match: discount = discount_match.group(1) else: continue else: continue # Clean up the values card_value = card_value.replace('$', '').strip() your_price = your_price.replace('$', '').strip() gift_cards.append({ 'Brand': brand, 'Card_Value': f"${card_value}", 'Discount': f"{discount}%", 'Your_Price': f"${your_price}" }) # Method 3: Look for the specific HTML structure pattern if not gift_cards: # Look for the exact pattern from the provided HTML page_text = soup.get_text() # Pattern: $200.00, 2.00% OFF, $196.00 pattern = r'\$(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)%\s*OFF\s*,\s*\$(\d+(?:\.\d+)?)' matches = re.findall(pattern, page_text) for card_value, discount, your_price in matches: gift_cards.append({ 'Brand': brand, 'Card_Value': f"${card_value}", 'Discount': f"{discount}%", 'Your_Price': f"${your_price}" }) # Method 4: Look for any elements containing the specific class names if not gift_cards: # Find all elements with the specific class patterns all_elements = soup.find_all('div', class_=re.compile(r'grouped-listing_')) values = [] discounts = [] for element in all_elements: class_name = element.get('class', []) if any('value__' in cls for cls in class_name): values.append(element.get_text(strip=True)) elif any('discount__' in cls for cls in class_name): discounts.append(element.get_text(strip=True)) # Pair them up for i in range(0, len(values), 2): if i + 1 < len(values) and i // 2 < len(discounts): card_value = values[i].replace('$', '').strip() your_price = values[i + 1].replace('$', '').strip() discount_text = discounts[i // 2] discount_match = re.search(r'(\d+(?:\.\d+)?)', discount_text) if discount_match: discount = discount_match.group(1) gift_cards.append({ 'Brand': brand, 'Card_Value': f"${card_value}", 'Discount': f"{discount}%", 'Your_Price': f"${your_price}" }) # Remove duplicates seen = set() unique_gift_cards = [] for card in gift_cards: key = (card['Brand'], card['Card_Value'], card['Your_Price']) if key not in seen: seen.add(key) unique_gift_cards.append(card) logger.info(f"Extracted {len(unique_gift_cards)} gift card variations for {brand}") return unique_gift_cards except Exception as e: logger.error(f"Error extracting gift card details: {e}") return [] def scrape_first_page_only(self) -> List[Dict]: """Scrape only the first page and follow each gift card link for accurate information""" if not self.setup_driver(): return [] try: # Navigate to first page if not self.navigate_to_first_page(): logger.error("Failed to navigate to first page") return [] # Scroll to load content self.scroll_and_load_content() # Extract gift card links from first page gift_card_links = self.extract_gift_card_links_from_first_page() if gift_card_links: logger.info(f"Found {len(gift_card_links)} gift card links on first page") # Follow each gift card link for link in gift_card_links: try: gift_cards = self.scrape_individual_gift_card_page(link) if gift_cards: self.all_gift_cards.extend(gift_cards) logger.info(f"Added {len(gift_cards)} gift cards from {link}") # Be respectful with delays time.sleep(2) except Exception as e: logger.error(f"Error processing link {link}: {e}") continue else: logger.warning("No gift card links found on first page") return self.all_gift_cards except Exception as e: logger.error(f"Error during scraping: {e}") return self.all_gift_cards finally: if self.driver: self.driver.quit() def save_data(self, gift_cards: List[Dict], csv_filename: str = "gcx_targeted_html_gift_cards.csv", excel_filename: str = "gcx_targeted_html_gift_cards.xlsx"): """Save scraped data to CSV and Excel files""" if not gift_cards: logger.warning("No data to save") return None # Create DataFrame df = pd.DataFrame(gift_cards) # Remove duplicates based on brand name, card value, and your price df = df.drop_duplicates(subset=['Brand', 'Card_Value', 'Your_Price'], keep='first') # Sort by Brand name, then by Card Value df = df.sort_values(['Brand', 'Card_Value'], ascending=[True, True]) # Save to CSV df.to_csv(csv_filename, index=False) logger.info(f"Saved {len(df)} gift cards to {csv_filename}") # Save to Excel df.to_excel(excel_filename, index=False, engine='openpyxl') logger.info(f"Saved {len(df)} gift cards to {excel_filename}") return df def analyze_results(self, gift_cards: List[Dict]): """Analyze the scraped results""" if not gift_cards: return print(f"\n" + "="*80) print("TARGETED HTML GIFT CARD SCRAPING RESULTS") print("="*80) print(f"Total gift cards scraped: {len(gift_cards)}") if gift_cards: # Show first 30 print(f"\nFirst 30 gift cards:") print("-" * 100) print(f"{'Rank':<4} {'Brand':<25} {'Card Value':<12} {'Discount':<10} {'Your Price':<12}") print("-" * 100) for i, card in enumerate(gift_cards[:30], 1): print(f"{i:<4} {card['Brand']:<25} {card['Card_Value']:<12} {card['Discount']:<10} {card['Your_Price']:<12}") # Show summary by brand df = pd.DataFrame(gift_cards) brand_summary = df.groupby('Brand').agg({ 'Card_Value': 'count', 'Discount': lambda x: f"{x.iloc[0]}" if len(x) > 0 else "N/A" }).rename(columns={'Card_Value': 'Card_Count'}) print(f"\nSummary by Brand:") print("-" * 70) print(f"{'Brand':<25} {'Cards':<10} {'Sample Discount':<15}") print("-" * 70) for brand, row in brand_summary.iterrows(): print(f"{brand:<25} {row['Card_Count']:<10} {row['Discount']:<15}") # Show examples of different prices for the same brand print(f"\nExamples of different prices for the same brand:") print("-" * 80) for brand in df['Brand'].unique()[:5]: # Show first 5 brands brand_cards = df[df['Brand'] == brand] if len(brand_cards) > 1: print(f"\n{brand}:") for _, card in brand_cards.head(5).iterrows(): print(f" {card['Card_Value']} - {card['Discount']} - You pay {card['Your_Price']}") def main(): """Main function""" logger.info("Starting targeted HTML gift card scraper for GCX...") # Try with visible browser first (better for debugging) scraper = TargetedHTMLGiftCardScraper(headless=False) gift_cards = scraper.scrape_first_page_only() if gift_cards: logger.info(f"Successfully scraped {len(gift_cards)} gift cards from first page") # Save data df = scraper.save_data(gift_cards) # Analyze results scraper.analyze_results(gift_cards) print(f"\nData saved to:") print(f"- gcx_targeted_html_gift_cards.csv") print(f"- gcx_targeted_html_gift_cards.xlsx") print(f"\nFormat: Brand | Card Value | Discount | Your Price") print(f"Where:") print(f"- Brand: Company name") print(f"- Card Value: Original gift card value (e.g., $5, $10, $25, $50, $100)") print(f"- Discount: Discount percentage for that specific amount") print(f"- Your Price: Actual price you pay for the gift card") else: logger.error("No gift cards found") print("\nNo gift cards found. This could be due to:") print("1. Website structure changes") print("2. Anti-bot protection") print("3. Network issues") print("4. Chrome driver not installed") if __name__ == "__main__": main()


Your Comment


Add Comment


Greasy Fork

"Libraries." *greasyfork.org*, https://greasyfork.org/en/scripts/libraries. Accessed 20 Apr. 2026.


Libraries


There are libraries posted by Greasy Fork users that you can @require in your scripts. For other kinds of libraries you can @require, read Greasy Fork's policy on @require.


@require


Torn Trade Reputation UI Library (Library) UI library for Torn Trade Reputation Author vreebn Created Updated


Torn Trade Reputation UI Library (Library) UI library for Torn Trade Reputation


(Library)


UI library for Torn Trade Reputation


Author


vreebn


Created


Updated


crazy nigga 2 recode off 222 (Library) punchmade dev - punch queen 2 Author jayden graves Created Updated


crazy nigga 2 recode off 222 (Library) punchmade dev - punch queen 2


punchmade dev - punch queen 2


jayden graves


推特x助手 (Library) 在推文里插入按钮，点击按钮把推文ID发送到自己的服务端，对推文进行后续处理。（自行修改服务器地址） Author 仙逆 Created Updated


推特x助手 (Library) 在推文里插入按钮，点击按钮把推文ID发送到自己的服务端，对推文进行后续处理。（自行修改服务器地址）


在推文里插入按钮，点击按钮把推文ID发送到自己的服务端，对推文进行后续处理。（自行修改服务器地址）


SLAMP CPT (Library) Universal Heatmap for Egypt, KSA, and UAE. No red if New Orders = 0. Author Mohab Elkady Created Updated


SLAMP CPT (Library) Universal Heatmap for Egypt, KSA, and UAE. No red if New Orders = 0.


Universal Heatmap for Egypt, KSA, and UAE. No red if New Orders = 0.


Mohab Elkady


🗑 Pro Upsell Remover (Layout Fixed + Error Killer) (Library) Remove "Unlock pro models" + Error screens + Fix ALL layout issues Author Vhgyu Nbjb Created Updated


🗑 Pro Upsell Remover (Layout Fixed + Error Killer) (Library) Remove "Unlock pro models" + Error screens + Fix ALL layout issues


Remove "Unlock pro models" + Error screens + Fix ALL layout issues


Vhgyu Nbjb


Toast组件模块（深色系）- 支持拖拽 (Library) 深色系提示的toast组件，支持操作按钮和拖拽移动位置 Author lulululu Created Updated


Toast组件模块（深色系）- 支持拖拽 (Library) 深色系提示的toast组件，支持操作按钮和拖拽移动位置


深色系提示的toast组件，支持操作按钮和拖拽移动位置


lulululu


Tribals.io Green ESP (Fixed) (Library) AHAHA AAMAKKAMAKMAKAMAK Author CursedDreammm Created Updated


Tribals.io Green ESP (Fixed) (Library) AHAHA AAMAKKAMAKMAKAMAK


AHAHA AAMAKKAMAKMAKAMAK


CursedDreammm


blackhack-logic (Library) Game logic, physics hooks and update extensions for blackhack Author CiNoP Created Updated


blackhack-logic (Library) Game logic, physics hooks and update extensions for blackhack


Game logic, physics hooks and update extensions for blackhack


CiNoP


GM_config_backup (Library) A lightweight, reusable, cross-browser graphical settings framework for inclusion in user scripts. Author TomaszFromasz Created Updated


GM_config_backup (Library) A lightweight, reusable, cross-browser graphical settings framework for inclusion in user scripts.


A lightweight, reusable, cross-browser graphical settings framework for inclusion in user scripts.


TomaszFromasz


Torn PDA: Item Market Price Tracker (Library) Muestra el precio mínimo de mercado de los ítems, similar a Torn Tools, optimizado para Torn PDA. Author Aarón Avendaño Created Updated


Torn PDA: Item Market Price Tracker (Library) Muestra el precio mínimo de mercado de los ítems, similar a Torn Tools, optimizado para Torn PDA.


Muestra el precio mínimo de mercado de los ítems, similar a Torn Tools, optimizado para Torn PDA.


Aarón Avendaño


MaraQuestHelpers (Library) Questing helpers Author marascript Created Updated


MaraQuestHelpers (Library) Questing helpers


Questing helpers


marascript


Pokémon Data (Library) Pokémon data Author Squornshellous Beta Created Updated


Pokémon Data (Library) Pokémon data


Pokémon data


Squornshellous Beta


JanitorAI - Macro Processor Library (Library) Macro processing library for JanitorAI. Replaces {{macro}} placeholders in text with computed values. Supports dice rolls, random picks, date/time, and utility macros. Author ZephyrThePink Created Updated


JanitorAI - Macro Processor Library (Library) Macro processing library for JanitorAI. Replaces {{macro}} placeholders in text with computed values. Supports dice rolls, random picks, date/time, and utility macros.


Macro processing library for JanitorAI. Replaces {{macro}} placeholders in text with computed values. Supports dice rolls, random picks, date/time, and utility macros.


ZephyrThePink


【去隐藏】 (Library) 删除页面中所有元素的 'javascript-hide' 类名 Author baoyu zhang Created Updated


【去隐藏】 (Library) 删除页面中所有元素的 'javascript-hide' 类名


删除页面中所有元素的 'javascript-hide' 类名


baoyu zhang


Sketchfab Model Downloader (View-Only Fix) (Library) Captures Sketchfab's actual model package (zip/osgjs/glb) from network traffic and exports as a proper .glb or .obj file you can open in Blender, Maya, etc. Author ibraheem adam Created Updated


Sketchfab Model Downloader (View-Only Fix) (Library) Captures Sketchfab's actual model package (zip/osgjs/glb) from network traffic and exports as a proper .glb or .obj file you can open in Blender, Maya, etc.


Captures Sketchfab's actual model package (zip/osgjs/glb) from network traffic and exports as a proper .glb or .obj file you can open in Blender, Maya, etc.


ibraheem adam


JVCare Transform (Library) JVCare Transform nodes list Author Atlantis-JS Created Updated


JVCare Transform (Library) JVCare Transform nodes list


JVCare Transform nodes list


Atlantis-JS


JanitorAI - Message Logger Library (Library) Standalone message-logging library for JanitorAI. Tracks the latest bot and user messages, their status (Complete/Streaming/Editing), swipe index, and text. Exposes a global API (window.JaiMessageLogger) for use by other scripts via @require. Author ZephyrThePink Created Updated


JanitorAI - Message Logger Library (Library) Standalone message-logging library for JanitorAI. Tracks the latest bot and user messages, their status (Complete/Streaming/Editing), swipe index, and text. Exposes a global API (window.JaiMessageLogger) for use by other scripts via @require.


Standalone message-logging library for JanitorAI. Tracks the latest bot and user messages, their status (Complete/Streaming/Editing), swipe index, and text. Exposes a global API (window.JaiMessageLogger) for use by other scripts via @require.


Starblast iOS Drop Gems Button (Library) Adds a button to drop gems (like pressing V) Author Shadow86 Created Updated


Starblast iOS Drop Gems Button (Library) Adds a button to drop gems (like pressing V)


Adds a button to drop gems (like pressing V)


shuffle script (Library) Adasdasdas Author TSG Services Created Updated


shuffle script (Library) Adasdasdas


Adasdasdas


TSG Services


OSM Map Features Data (Library) provides OSM Map Features data Author kakageo Created Updated


OSM Map Features Data (Library) provides OSM Map Features data


provides OSM Map Features data


kakageo


Fk chai limits (Library) … Author Sadnameil Nm Created Updated


Fk chai limits (Library) …


Sadnameil Nm


blackhack-ui (Library) UI components for blackhack Author CiNoP Created Updated


blackhack-ui (Library) UI components for blackhack


UI components for blackhack


blackhack-map (Library) Map parsing functions for blackhack Author CiNoP Created Updated


blackhack-map (Library) Map parsing functions for blackhack


Map parsing functions for blackhack


blackhack-utils (Library) Utility functions for blackhack Author CiNoP Created Updated


blackhack-utils (Library) Utility functions for blackhack


Utility functions for blackhack


Valhalla: Warrior's Hall (Library) Norse Mythology Edition — Single API Key Engine, Tactical Cards, FF Scouter, War Room SOS, TornPDA Touch Support Author Suraj sharma Created Updated


Valhalla: Warrior's Hall (Library) Norse Mythology Edition — Single API Key Engine, Tactical Cards, FF Scouter, War Room SOS, TornPDA Touch Support


Norse Mythology Edition — Single API Key Engine, Tactical Cards, FF Scouter, War Room SOS, TornPDA Touch Support


Suraj sharma


Pixel client for bloxd.io (Library) Closet cheat client for bloxd.io (Autoclicker, Auto-E, Fake Aim Assist, CPS Shower, Title) Author Cartoon Bloxd Carton Created Updated


Pixel client for bloxd.io (Library) Closet cheat client for bloxd.io (Autoclicker, Auto-E, Fake Aim Assist, CPS Shower, Title)


Closet cheat client for bloxd.io (Autoclicker, Auto-E, Fake Aim Assist, CPS Shower, Title)


Cartoon Bloxd Carton


Geo.Utils (Library) Spherical geometry utility class for WME scripts Author Anton Shevchuk Created Updated


Geo.Utils (Library) Spherical geometry utility class for WME scripts


Spherical geometry utility class for WME scripts


Anton Shevchuk


闲鱼商用咖啡机监控(仅个人卖家) (Library) 监控闲鱼个人卖家：诺瓦 Appia 意大利商用咖啡机，自动刷新+上新提醒 Author white ss Created Updated


闲鱼商用咖啡机监控(仅个人卖家) (Library) 监控闲鱼个人卖家：诺瓦 Appia 意大利商用咖啡机，自动刷新+上新提醒


监控闲鱼个人卖家：诺瓦 Appia 意大利商用咖啡机，自动刷新+上新提醒


white ss


AD - Bearer-update v3 (Library) AD Bearer-helper Author MartinHH Created Updated


AD - Bearer-update v3 (Library) AD Bearer-helper


AD Bearer-helper


MartinHH


Readable Textarea Expander (Library) Expands small textareas to improve readability and editing comfort on common websites. Author Tarik Ibrahimović Created Updated


Readable Textarea Expander (Library) Expands small textareas to improve readability and editing comfort on common websites.


Expands small textareas to improve readability and editing comfort on common websites.


Tarik Ibrahimović


Drawaria gallery library (Library) Library with placeholders for your canvas to the gallery. Author YouTubeDrawaria Created Updated


Drawaria gallery library (Library) Library with placeholders for your canvas to the gallery.


Library with placeholders for your canvas to the gallery.


YouTubeDrawaria


🌍 PopLang (Library) Popmundo script ekosistemi için merkezi çeviri ve dil modülü Author Luke James gibson Created Updated


🌍 PopLang (Library) Popmundo script ekosistemi için merkezi çeviri ve dil modülü


Popmundo script ekosistemi için merkezi çeviri ve dil modülü


Luke James gibson


Drawaria OSINT Sidebar Companion (Library) Librería Auxiliar OSINT (Sidebar). QBit Bridge, OpenCV Safe, YouTube/eBay Scraper. Author YouTubeDrawaria Created Updated


Drawaria OSINT Sidebar Companion (Library) Librería Auxiliar OSINT (Sidebar). QBit Bridge, OpenCV Safe, YouTube/eBay Scraper.


Librería Auxiliar OSINT (Sidebar). QBit Bridge, OpenCV Safe, YouTube/eBay Scraper.


SPA Navigate Library (Library) History APIフックによるSPAページ遷移検知ライブラリ。SPANavigate.on() でコールバックを登録する。 Author Toshi Created Updated


SPA Navigate Library (Library) History APIフックによるSPAページ遷移検知ライブラリ。SPANavigate.on() でコールバックを登録する。


History APIフックによるSPAページ遷移検知ライブラリ。SPANavigate.on() でコールバックを登録する。


Toshi


111222333 (Library) 333 Author 英语超好sss Created Updated


111222333 (Library) 333


英语超好sss


NH_spa (Library) Support for Single-Page Applications (SPA). Author Mike Castle (Nexus) Created Updated


NH_spa (Library) Support for Single-Page Applications (SPA).


Support for Single-Page Applications (SPA).


Mike Castle (Nexus)


mike's lib (Library) 快速處理畫面操作 Author mikeyen1983 Created Updated


mike's lib (Library) 快速處理畫面操作


快速處理畫面操作


AD - Bearer-update v4 (Library) AD Bearer-helper Author MartinHH Created Updated


AD - Bearer-update v4 (Library) AD Bearer-helper


Drawaria Avatar Builder Loading Fix Suite (Library) Bypass Loading, Exportación Secuencial en Vivo y Sobrescritura de Librería JSON Author YouTubeDrawaria Created Updated


Drawaria Avatar Builder Loading Fix Suite (Library) Bypass Loading, Exportación Secuencial en Vivo y Sobrescritura de Librería JSON


Bypass Loading, Exportación Secuencial en Vivo y Sobrescritura de Librería JSON


WME Utils - SDK Google Link Enhancer (Library) Adds some extra WME functionality related to Google place links. Author JustinS83 Waze, JS55CT, and WazeDev Created Updated


WME Utils - SDK Google Link Enhancer (Library) Adds some extra WME functionality related to Google place links.


Adds some extra WME functionality related to Google place links.


JustinS83 Waze, JS55CT, and WazeDev


HWHT ToE Module (Library) ToE Counter Picker & AutoToE for HWH Tweaker Author bengineer Created Updated


HWHT ToE Module (Library) ToE Counter Picker & AutoToE for HWH Tweaker


ToE Counter Picker & AutoToE for HWH Tweaker


bengineer


HWHT Data Module (Library) Data for HWH Tweaker Author bengineer Created Updated


HWHT Data Module (Library) Data for HWH Tweaker


Data for HWH Tweaker


SPA 動態路由監聽器 (Library) 監聽 SPA 網站的動態路由變化，在進入/離開特定頁面時觸發回調 Author Max46656 Created Updated


SPA 動態路由監聽器 (Library) 監聽 SPA 網站的動態路由變化，在進入/離開特定頁面時觸發回調


監聽 SPA 網站的動態路由變化，在進入/離開特定頁面時觸發回調


Torn Utils Library (Library) Shared utility functions for Torn userscripts Author Paulo Pascoal Created Updated


Torn Utils Library (Library) Shared utility functions for Torn userscripts


Shared utility functions for Torn userscripts


Paulo Pascoal


567501 userscript i18n (Library) Localization for https://greasyfork.org/en/scripts/567501-restore-subscriber-online-counts-reddit Author littux Created Updated


567501 userscript i18n (Library) Localization for https://greasyfork.org/en/scripts/567501-restore-subscriber-online-counts-reddit


Localization for https://greasyfork.org/en/scripts/567501-restore-subscriber-online-counts-reddit


littux


Autodarts - Bearer-update (Library) Bearer-update Author MartinHH Created Updated


Autodarts - Bearer-update (Library) Bearer-update


Bearer-update


JAV-JHS-STYLE (Library) JAV-JHS 深色模式 Author ag123gfa12 Created Updated


JAV-JHS-STYLE (Library) JAV-JHS 深色模式


JAV-JHS 深色模式


bilibili分区ID与名称映射(v2) (Library) 用tid_v2获取获取不到的tname_v2 Author ThiefKiller7 Created Updated


bilibili分区ID与名称映射(v2) (Library) 用tid_v2获取获取不到的tname_v2


Automatically Update Script (Library) Library that automatically alerts user when the script requires update. Complies with Greasy Fork rules (greasyfork.org/help/code-rules). Author NotYou Created Updated


Automatically Update Script (Library) Library that automatically alerts user when the script requires update. Complies with Greasy Fork rules (greasyfork.org/help/code-rules).


Library that automatically alerts user when the script requires update. Complies with Greasy Fork rules (greasyfork.org/help/code-rules).


NotYou


TamperGuide (Library) Lightweight library for product tours, highlights, and contextual help in Tampermonkey userscripts. Inspired by driver.js, designed for the userscript ecosystem. Zero dependencies, Auto-injects CSS, Sandbox-compatible Author UNKchr Created Updated


TamperGuide (Library) Lightweight library for product tours, highlights, and contextual help in Tampermonkey userscripts. Inspired by driver.js, designed for the userscript ecosystem. Zero dependencies, Auto-injects CSS, Sandbox-compatible


Lightweight library for product tours, highlights, and contextual help in Tampermonkey userscripts. Inspired by driver.js, designed for the userscript ecosystem. Zero dependencies, Auto-injects CSS, Sandbox-compatible


UNKchr


bilibili分区ID与名称映射 (Library) 用tid获取获取不到的tname Author ThiefKiller7 Created Updated


bilibili分区ID与名称映射 (Library) 用tid获取获取不到的tname


用tid获取获取不到的tname


OpenClaw 翻译字典 (Library) OpenClaw Control UI 汉化字典 - 供主脚本引用 Author 商伤 Created Updated


OpenClaw 翻译字典 (Library) OpenClaw Control UI 汉化字典 - 供主脚本引用


OpenClaw Control UI 汉化字典 - 供主脚本引用


itemDB Fetch Lib (Library) Fetches something from itemDB, handling authentication issues arising from the March 2026 API update. Author saahphire Created Updated


itemDB Fetch Lib (Library) Fetches something from itemDB, handling authentication issues arising from the March 2026 API update.


Fetches something from itemDB, handling authentication issues arising from the March 2026 API update.


saahphire


Neopets: Shop Wizard Anchor Creator (Library) Creates an anchor elements that opens the normal Shop Wizard if an user doesn't have Premium, or the Super Shop Wizard if they do. Author saahphire Created Updated


Neopets: Shop Wizard Anchor Creator (Library) Creates an anchor elements that opens the normal Shop Wizard if an user doesn't have Premium, or the Super Shop Wizard if they do.


Creates an anchor elements that opens the normal Shop Wizard if an user doesn't have Premium, or the Super Shop Wizard if they do.


PNG X (Library) BB PNG image Author 人民的勤务员 Created Updated


PNG X (Library) BB PNG image


BB PNG image


人民的勤务员


Container_Info_Bridge (Library) bridge for container info (case-insensitive) Author Harfho Created Updated


Container_Info_Bridge (Library) bridge for container info (case-insensitive)


bridge for container info (case-insensitive)


Harfho


Shared_Storage_Bridge (Library) Shared_Storage_Bridge script for the extension Author Harfho Created Updated


Shared_Storage_Bridge (Library) Shared_Storage_Bridge script for the extension


Shared_Storage_Bridge script for the extension


RuleEditor (Library) A CodeMirror 6 based rule editor with Regex validation, search, and theme switching. Author ryxel Created Updated


RuleEditor (Library) A CodeMirror 6 based rule editor with Regex validation, search, and theme switching.


A CodeMirror 6 based rule editor with Regex validation, search, and theme switching.


ryxel


MetadataParser (Library) A solution to parse user-script metadata blocks. Author NotYou Created Updated


MetadataParser (Library) A solution to parse user-script metadata blocks.


A solution to parse user-script metadata blocks.


API-Speicher Original (Library) Erlaubt die Speicherung und Wiederverwendung von API-Daten des Leitstellenspiels Author Manute1337 Created Updated


API-Speicher Original (Library) Erlaubt die Speicherung und Wiederverwendung von API-Daten des Leitstellenspiels


Erlaubt die Speicherung und Wiederverwendung von API-Daten des Leitstellenspiels


集成TyprMd5的通用脚本 (Library) 引入scriptcat的TyprMd5.js库，用于MD5相关计算 Author yyy.404 Created Updated


集成TyprMd5的通用脚本 (Library) 引入scriptcat的TyprMd5.js库，用于MD5相关计算


Paywall to Archive (Universal) (Library) 在各大付费新闻网站添加悬浮按钮，一键跳转到Archive.today阅读全文 Author TTO Feathamity Created Updated


Paywall to Archive (Universal) (Library) 在各大付费新闻网站添加悬浮按钮，一键跳转到Archive.today阅读全文


在各大付费新闻网站添加悬浮按钮，一键跳转到Archive.today阅读全文


TTO Feathamity


Bilibili App Auth (Library) 哔哩哔哩 App 端鉴权 Author GabrielxD Created Updated


Bilibili App Auth (Library) 哔哩哔哩 App 端鉴权


哔哩哔哩 App 端鉴权


GabrielxD


Zod 3.x Error Formatter (Library) Formats zod 3.x error in human readable format Author NotYou Created Updated


Zod 3.x Error Formatter (Library) Formats zod 3.x error in human readable format


Formats zod 3.x error in human readable format


Chill Guy Auto-Clicker (Library) First time posting see if it works if it does not reach out to me and I will try to fix it. Author eaw2k12 Created Updated


Chill Guy Auto-Clicker (Library) First time posting see if it works if it does not reach out to me and I will try to fix it.


First time posting see if it works if it does not reach out to me and I will try to fix it.


Jut.su Auto+ Core Library (Library) Ядро логики для Jut.su Auto+ (API, обсерверы, парсинг названий) Author Родион Moroz Created Updated


Jut.su Auto+ Core Library (Library) Ядро логики для Jut.su Auto+ (API, обсерверы, парсинг названий)


Ядро логики для Jut.su Auto+ (API, обсерверы, парсинг названий)


Родион Moroz


Preeti to Unicode Converter (Library) Converts Preeti and other Nepali fonts to Unicode Author kid4rm90s Created Updated


Preeti to Unicode Converter (Library) Converts Preeti and other Nepali fonts to Unicode


Converts Preeti and other Nepali fonts to Unicode


Node Mutation Hook Library (Library) A wrapper around MutationObserver to hook into creation of elements (filtered on CSS selector) or removal of nodes. Author abcenjoyer Created Updated


Node Mutation Hook Library (Library) A wrapper around MutationObserver to hook into creation of elements (filtered on CSS selector) or removal of nodes.


A wrapper around MutationObserver to hook into creation of elements (filtered on CSS selector) or removal of nodes.


abcenjoyer


FileSaver-2.0.5 (Library) FileSaver 2.0.5 Author ssnangua Created Updated


FileSaver-2.0.5 (Library) FileSaver 2.0.5


FileSaver 2.0.5


ssnangua


JSZip-v3.9.1 (Library) JSZip v3.9.1 Author ssnangua Created Updated


JSZip-v3.9.1 (Library) JSZip v3.9.1


JSZip v3.9.1


GM_archiveImages (Library) 打包下载图片 Author ssnangua Created Updated


GM_archiveImages (Library) 打包下载图片


打包下载图片


GM_request (Library) GM_xmlhttpRequest 的 Promise 封装，并增加 retry 功能 Author ssnangua Created Updated


GM_request (Library) GM_xmlhttpRequest 的 Promise 封装，并增加 retry 功能


GM_xmlhttpRequest 的 Promise 封装，并增加 retry 功能


GM_pLimit (Library) 并发控制 Author ssnangua Created Updated


GM_pLimit (Library) 并发控制


并发控制


minin-bloxd-cheat (Library) made by vivaan bloxd script for mobile and pc Author Tukku Sarathe Created Updated


minin-bloxd-cheat (Library) made by vivaan bloxd script for mobile and pc


made by vivaan bloxd script for mobile and pc


Tukku Sarathe


Live2D Waifu Tips Library (Library) Live2D 看板娘提示库 - 用于看板娘脚本 Author yyy.404 Created Updated


Live2D Waifu Tips Library (Library) Live2D 看板娘提示库 - 用于看板娘脚本


Live2D 看板娘提示库 - 用于看板娘脚本


Live2D Core Library (Library) Live2D 核心库 - 用于看板娘脚本 Author yyy.404 Created Updated


Live2D Core Library (Library) Live2D 核心库 - 用于看板娘脚本


Live2D 核心库 - 用于看板娘脚本


Click&Fit Photos Module (Library) Module pour afficher les photos locales liées aux lentilles Author Precilens Created Updated


Click&Fit Photos Module (Library) Module pour afficher les photos locales liées aux lentilles


Module pour afficher les photos locales liées aux lentilles


Precilens


Evolve Auto-Library (Library) Evolve Auto 的靜態工具庫 (UI, Utils, Scanner, GameData)。供主邏輯腳本調用。 Author Babbit Lunatic Created Updated


Evolve Auto-Library (Library) Evolve Auto 的靜態工具庫 (UI, Utils, Scanner, GameData)。供主邏輯腳本調用。