├── .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 |
--------------------------------------------------------------------------------