├── .gitattributes ├── README.md ├── chromedriver.exe ├── data ├── data.csv └── tags.txt ├── main.py └── requirements.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Redbubble-Auto-Uploader 2 | • A Python Bot that Automatically Upload your Designs as Stickers to your Redbubble Store.

3 | # Features 4 | • No Coding Skills required to run this bot.
5 | • Save your time and let the bot do the hard work for you.
6 | • Very helpful bot to boost your sales.
7 | • This bot works only for Stickers.
8 | # How to Use the Bot 9 | • Make sure to watch the full tutorial on how to use the bot step by step.
10 | -------------------------------------------------------------------------------- /chromedriver.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pythontester192/Redbubble-Auto-Uploader/6e860c61c06a7797ea993692b91c90586f846822/chromedriver.exe -------------------------------------------------------------------------------- /data/data.csv: -------------------------------------------------------------------------------- 1 | file_path;title;description 2 | C:\Users\python\Desktop\redbubble bot\data\stickers\design1.png;; 3 | C:\Users\python\Desktop\redbubble bot\data\stickers\design2.png;; 4 | C:\Users\python\Desktop\redbubble bot\data\stickers\design3.png;; 5 | C:\Users\python\Desktop\redbubble bot\data\stickers\design4.png;; 6 | C:\Users\python\Desktop\redbubble bot\data\stickers\design5.png;; 7 | C:\Users\python\Desktop\redbubble bot\data\stickers\design6.png;; 8 | C:\Users\python\Desktop\redbubble bot\data\stickers\design7.png;; 9 | C:\Users\python\Desktop\redbubble bot\data\stickers\design8.png;; 10 | C:\Users\python\Desktop\redbubble bot\data\stickers\design9.png;; 11 | C:\Users\python\Desktop\redbubble bot\data\stickers\design10.png;; 12 | -------------------------------------------------------------------------------- /data/tags.txt: -------------------------------------------------------------------------------- 1 | programming, programmer, tech, computer, coding, computer science, developer, coder, programming meme, dev, programming memes, meme, joke, programmer jokes, css -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from selenium.webdriver.common.by import By 3 | from selenium.webdriver.chrome.options import Options 4 | import time 5 | import os 6 | import csv 7 | import codecs 8 | 9 | 10 | # Initializing Bot 11 | print('Bot started, if it fails, make sure you havent reached your upload limit Or adjust the sleep time and retry.') 12 | options = Options() 13 | options.add_argument("start-maximized") 14 | options.add_argument("disable-infobars") 15 | options.add_argument("--disable-blink-features") 16 | options.add_argument("--disable-blink-features=AutomationControlled") 17 | options.add_argument("user-data-dir=C:\\Users\\python\\AppData\\Local\\Google\\Chrome Beta\\User Data") 18 | options.add_experimental_option("excludeSwitches", ["enable-automation"]) 19 | options.add_experimental_option('useAutomationExtension', False) 20 | options.binary_location = 'C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe' 21 | driver = webdriver.Chrome(executable_path = "chromedriver.exe", options = options) 22 | driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { 23 | "source": 24 | "const newProto = navigator.__proto__;" 25 | "delete newProto.webdriver;" 26 | "navigator.__proto__ = newProto;" 27 | }) 28 | driver.get('https://www.redbubble.com/portfolio/images/new') 29 | 30 | def auto_upload(): 31 | #Read Tags 32 | file_path = "data/tags.txt" 33 | #check if file is present 34 | if os.path.isfile(file_path): 35 | #open text file in read mode 36 | text_file = open(file_path, "r") 37 | 38 | #read whole file to a string 39 | data = text_file.read() 40 | 41 | #close file 42 | text_file.close() 43 | 44 | # Loop for uploading 45 | with open('data/data.csv', 'rb') as f: 46 | next(f) 47 | reader = csv.reader(codecs.iterdecode(f, 'utf-8'), delimiter=';') 48 | for row in reader: 49 | uploadButton = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/div/div[1]/div[1]/input') 50 | uploadButton.send_keys(row[0]) 51 | time.sleep(10) 52 | title = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/div/div[3]/div/div/div[1]/div/div[1]/input') 53 | title.send_keys(row[1]) 54 | time.sleep(2) 55 | description = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/div/div[3]/div/div/div[1]/div/div[3]/textarea') 56 | description.send_keys(row[2]) 57 | time.sleep(2) 58 | tags = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/div/div[3]/div/div/div[1]/div/div[2]/textarea') 59 | tags.send_keys(data) 60 | time.sleep(2) 61 | clicks = driver.find_elements(By.XPATH, '//div[@class="rb-button disable-all green"]') 62 | for click in clicks: 63 | try: 64 | click = click.click() 65 | time.sleep(1) 66 | except Exception: 67 | pass 68 | time.sleep(2) 69 | enableSticker = driver.find_element(By.XPATH, '//*[@id="add-new-work"]/section[1]/div/div[14]/div[2]/div[4]/div[2]/div[2]') 70 | enableSticker.click() 71 | time.sleep(5) 72 | media = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/section[2]/div[1]/div[1]/div/div/label[2]/input[2]') 73 | media.click() 74 | time.sleep(2) 75 | defaultProduct = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/section[2]/div[2]/div[1]/select/option[70]') 76 | defaultProduct.click() 77 | time.sleep(2) 78 | matureButton = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/section[2]/div[2]/div[2]/div/label[2]/input') 79 | matureButton.click() 80 | time.sleep(2) 81 | rightsButton = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/section[2]/div[3]/input') 82 | rightsButton.click() 83 | time.sleep(2) 84 | saveWorkButton = driver.find_element(By.XPATH, '/html/body/div[1]/div[5]/div[2]/form/section[2]/div[4]/div/input') 85 | saveWorkButton.click() 86 | time.sleep(20) 87 | print('You have successfully uploaded your design.') 88 | restartButton = driver.find_element(By.XPATH, '/html/body/div[1]/div/div[1]/div[2]/div/div/div/div[1]/div/div/div[2]/div/a/span') 89 | restartButton.click() 90 | time.sleep(10) 91 | 92 | print('You have successfully uploaded all the designs!') 93 | 94 | if __name__ == "__main__": 95 | auto_upload() 96 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | selenium 2 | --------------------------------------------------------------------------------