├── classes ├── templates │ ├── sitekey.html │ ├── json.html │ └── index.html ├── fetchtoken.py ├── twocaptcha.py ├── harvester.py ├── captchaharv.py ├── captchaengine.py ├── createadidas.py ├── adicarter.py ├── acccreator.py └── adidas.py ├── yeezy_tstar-regular-webfont.ttf ├── README.md └── main.py /classes/templates/sitekey.html: -------------------------------------------------------------------------------- 1 | {{sitekey}} 2 | -------------------------------------------------------------------------------- /classes/templates/json.html: -------------------------------------------------------------------------------- 1 | {{ content|tojson }} 2 | -------------------------------------------------------------------------------- /yeezy_tstar-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cosmo3904/ProjectThetaV2-Free/HEAD/yeezy_tstar-regular-webfont.ttf -------------------------------------------------------------------------------- /classes/fetchtoken.py: -------------------------------------------------------------------------------- 1 | import requests, json 2 | 3 | tokens = [] 4 | 5 | def main(): 6 | global Tokens 7 | s = requests.Session() 8 | while True: 9 | try: 10 | res = s.get('http://127.0.0.1:5000/json') 11 | break 12 | except: 13 | pass 14 | json_dict = res.json() 15 | index = 0 16 | capToken = 'temp' 17 | while True: 18 | try: 19 | capToken = json_dict['tokens'][index] 20 | except IndexError: 21 | index = 0 22 | while True: 23 | try: 24 | res = s.get('http://127.0.0.1:5000/json') 25 | break 26 | except: 27 | pass 28 | json_dict = res.json() 29 | pass 30 | if capToken in tokens: 31 | index = index + 1 32 | elif capToken == 'temp': 33 | pass 34 | elif capToken == '': 35 | index = index + 1 36 | else: 37 | tokens.append(capToken) 38 | return(capToken) 39 | -------------------------------------------------------------------------------- /classes/twocaptcha.py: -------------------------------------------------------------------------------- 1 | import requests, time 2 | 3 | class TwoCaptchaCosmo: 4 | def __init__(self, apikey, sitekey, url): 5 | self.s = requests.Session() 6 | self.apikey = apikey 7 | self.sitekey = sitekey 8 | self.url = url 9 | def Solve(self): 10 | postpayload = { 11 | 'key' : self.apikey, 12 | 'method' : 'userrecaptcha', 13 | 'googlekey' : self.sitekey, 14 | 'pageurl' : self.url, 15 | 'json' : '1' 16 | } 17 | 18 | res = self.s.post('http://2captcha.com/in.php', data = postpayload) 19 | capid = res.json()['request'] 20 | 21 | if capid == 'ERROR_ZERO_BALANCE': 22 | return('ERROR_ZERO_BALANCE') 23 | 24 | while True: 25 | getpayload = { 26 | 'action' : 'get', 27 | 'key' : self.apikey, 28 | 'id' : capid 29 | } 30 | 31 | res = self.s.post('http://2captcha.com/res.php', data = getpayload) 32 | 33 | while 'NOT_READY' in res.text: 34 | time.sleep(5) 35 | res = self.s.post('http://2captcha.com/res.php', data = getpayload) 36 | 37 | return(res.text[res.text.find('|')+1:]) 38 | -------------------------------------------------------------------------------- /classes/harvester.py: -------------------------------------------------------------------------------- 1 | #Code Written by @Cosm00_ 2 | #Stay Based Youngins.... 3 | 4 | from flask import Flask, render_template, request 5 | from threading import Thread 6 | from sys import argv 7 | import logging, time, sys 8 | 9 | logging.getLogger('werkzeug').setLevel(logging.ERROR) 10 | 11 | tokens = {'tokens':[]} 12 | 13 | app = Flask(__name__) 14 | 15 | def tokenremoval(token): 16 | tokens['tokens'].append(token) 17 | time.sleep(110) 18 | tokens['tokens'].remove(token) 19 | 20 | @app.route('/json', methods=['GET']) 21 | def json(): 22 | content = tokens 23 | return(render_template('json.html', content = content)) 24 | 25 | @app.route('/solve', methods=['GET', 'POST']) 26 | def solve(): 27 | if request.method == "POST": 28 | token = request.form.get('g-recaptcha-response', '') 29 | Thread(target = tokenremoval, args = [token]).start() 30 | return(render_template('index.html', sitekey = sitekey)) 31 | 32 | @app.route('/sitekey', methods=['GET']) 33 | def sitekey(): 34 | return(render_template('sitekey.html', sitekey = sitekey)) 35 | 36 | if __name__ == '__main__': 37 | try: 38 | sitekey = argv[1] 39 | except IndexError: 40 | print('Error') 41 | Thread(target = app.run).start() 42 | -------------------------------------------------------------------------------- /classes/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Captcha Harvester 4 | 14 | 15 | 16 |
17 |

Captcha Token Harvester

18 |
HTML by: @pxtvr
19 |
Python by: @Cosm00_
20 |
21 |
22 |
23 | 24 |

25 | 50 |

51 |
52 |
53 |
54 |
Usable Tokens
55 |
56 |
57 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /classes/captchaharv.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtCore, QtGui, QtWidgets 2 | from threading import Thread 3 | from classes import harvester 4 | 5 | class Ui_Dialog(object): 6 | def setupUi(self, Dialog): 7 | Dialog.setObjectName("Dialog") 8 | Dialog.resize(400, 81) 9 | self.label_2 = QtWidgets.QLabel(Dialog) 10 | self.label_2.setGeometry(QtCore.QRect(16, 13, 60, 16)) 11 | font = QtGui.QFont() 12 | font.setFamily("YEEZY TSTAR") 13 | font.setPointSize(14) 14 | self.label_2.setFont(font) 15 | self.label_2.setObjectName("label_2") 16 | self.txtSitekey = QtWidgets.QLineEdit(Dialog) 17 | self.txtSitekey.setGeometry(QtCore.QRect(90, 10, 291, 21)) 18 | font = QtGui.QFont() 19 | font.setFamily("YEEZY TSTAR") 20 | font.setPointSize(14) 21 | self.txtSitekey.setFont(font) 22 | self.txtSitekey.setObjectName("txtSitekey") 23 | self.btnStart = QtWidgets.QPushButton(Dialog) 24 | self.btnStart.setGeometry(QtCore.QRect(10, 40, 381, 32)) 25 | font = QtGui.QFont() 26 | font.setFamily("YEEZY TSTAR") 27 | font.setPointSize(14) 28 | self.btnStart.setFont(font) 29 | self.btnStart.setAutoDefault(False) 30 | self.btnStart.setObjectName("btnStart") 31 | 32 | self.retranslateUi(Dialog) 33 | QtCore.QMetaObject.connectSlotsByName(Dialog) 34 | 35 | def retranslateUi(self, Dialog): 36 | _translate = QtCore.QCoreApplication.translate 37 | Dialog.setWindowTitle(_translate("Dialog", "Captcha Harvester")) 38 | self.label_2.setText(_translate("Dialog", "Sitekey")) 39 | self.btnStart.setText(_translate("Dialog", "Start Harvester")) 40 | self.btnStart.clicked.connect(self.startHarvester) 41 | 42 | def startHarvester(self): 43 | harvester.sitekey = self.txtSitekey.text() 44 | Thread(target = lambda: harvester.app.run(host = '0.0.0.0')).start() 45 | 46 | 47 | if __name__ == "__main__": 48 | import sys 49 | app = QtWidgets.QApplication(sys.argv) 50 | Dialog = QtWidgets.QDialog() 51 | ui = Ui_Dialog() 52 | ui.setupUi(Dialog) 53 | Dialog.show() 54 | sys.exit(app.exec_()) 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ProjectThetaV2-Free 2 | 3 | ## INSTALL THE FONT FILE FIRST OR NOTHING WILL LOOK RIGHT 4 | ## Before first run of the script run the following command : pip3 install pyqt5 requests flask python_anticaptcha lxml bs4 5 | 6 | ## Captcha Harvester 7 | The captcha harvester starts a web server on port 5000 using your local IP address. You can view this webpage by going to http://127.0.0.1:5000/solve however it's likely you will get the error 'localhost is not a supported domain' or something of the sort. To fix this you need to append your hosts file. On windows, this file is located in the directory 'C:\Windows\System32\drivers\etc\hosts'. On linux or osx, this file is located in the directory '/etc/hosts'. To append this file you will open your hosts file and add '127.0.0.1 dev.adidas.com' for adidas to the end of the file (and if you're harvesting for a different website just follow that format, for example supremenewyork would be '127.0.0.1 dev.supremenewyork.com'). After you've done this, the webpage you added to your hosts will now take place of 127.0.0.1 in the previous url EG: http://dev.adidas.com:5000/solve. After solving tokens, the successfully created tokens will be stored in the webpage http://127.0.0.1:5000/tokens. All tokens expire after 110 seconds because recaptcha tokens are only valid for 2 minutes. 8 | 9 | ## Captcha Engine 10 | The captcha engine fetches tokens simultaneously from anti-captcha and 2captcha upon request. The text boxes are for your API key's from the respective services. The engine is multithreaded so if you need 10 captcha tokens asap you can change the 'Tasks per Service' number to 10 which will yield 10 tokens being requested from both 2captcha and anti-captcha. If you don't want to use one of these two services, simply select the off radio button and the engine will not fetch a token from that service. These tokens are posted to the captcha harvester so make sure the harvester is running before requesting tokens from the engine. If you need to use these tokens they can be found at the web address http://127.0.0.1:5000/tokens. 11 | 12 | ## Account Creator 13 | Update: Changed account creation to be done on the .co.uk domain for adidas. All accounts are universal but when being created on the US server the minimum age requirement was causing issues with other domains, this was fixed by switching the sign up to the GB locale. Thanks! 14 | 15 | The adidas account creator creates a list of email address(s) depending on the email creation style. If using gmail you will enter the normal gmail address. If using catch-all you will just enter the domain of the email server. After this is done, the script will create the accounts and test them by signing into adidas once. Each account needs a captcha token that the script pulls from the captcha harvester's successful tokens which are stored for 110 seconds @ http://127.0.0.1:5000/tokens. The sitekey for account creation can be found on the page : https://cp.adidas.co.uk/web/eCom/en_GB/loadcreateaccount 16 | 17 | ## Adidas Carter 18 | Proxies must be saved in a file with only one proxy per line. Proxies must be in the format STYLEOFPROXIES://USERNAME:PASSWORD@IPADDRESS:PORT. If your proxies do not have usernames and passwords just remove the username:password@. Your proxy would only need to be STYLEOFPROXY://IPADDRESS:PORT. So, for example a socks5 proxy with the username of cosmo and password of coolpass @ the ipaddress of 8.8.8.8 using the port 8080 the format would be: socks5://cosmo:coolpass@8.8.8.8:8080. The program does not currently support adidas accounts for logging into the carted items. You can however do this manually with the browsers that open up. Im not sure but I don't think the timer currently works either, if someone can test that and get back to me that would be great. Thanks. Demonstration Video @ : https://youtu.be/ysxuS5rJ164 19 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtCore, QtGui, QtWidgets 2 | from classes import adicarter, captchaengine, captchaharv, acccreator 3 | 4 | class Ui_Dialog(object): 5 | def setupUi(self, Dialog): 6 | Dialog.setObjectName("Dialog") 7 | Dialog.resize(197, 171) 8 | self.btnCaptchaHarv = QtWidgets.QPushButton(Dialog) 9 | self.btnCaptchaHarv.setGeometry(QtCore.QRect(10, 10, 181, 32)) 10 | font = QtGui.QFont() 11 | font.setFamily("YEEZY TSTAR") 12 | font.setPointSize(14) 13 | self.btnCaptchaHarv.setFont(font) 14 | self.btnCaptchaHarv.setAutoDefault(False) 15 | self.btnCaptchaHarv.setFlat(False) 16 | self.btnCaptchaHarv.setObjectName("btnCaptchaHarv") 17 | self.btnAccCreator = QtWidgets.QPushButton(Dialog) 18 | self.btnAccCreator.setGeometry(QtCore.QRect(10, 90, 181, 32)) 19 | font = QtGui.QFont() 20 | font.setFamily("YEEZY TSTAR") 21 | font.setPointSize(14) 22 | self.btnAccCreator.setFont(font) 23 | self.btnAccCreator.setAutoDefault(False) 24 | self.btnAccCreator.setObjectName("btnAccCreator") 25 | self.btnCaptchaEngine = QtWidgets.QPushButton(Dialog) 26 | self.btnCaptchaEngine.setGeometry(QtCore.QRect(10, 50, 181, 32)) 27 | font = QtGui.QFont() 28 | font.setFamily("YEEZY TSTAR") 29 | font.setPointSize(14) 30 | self.btnCaptchaEngine.setFont(font) 31 | self.btnCaptchaEngine.setAutoDefault(False) 32 | self.btnCaptchaEngine.setObjectName("btnCaptchaEngine") 33 | self.btnAdiCarter = QtWidgets.QPushButton(Dialog) 34 | self.btnAdiCarter.setGeometry(QtCore.QRect(10, 130, 181, 32)) 35 | font = QtGui.QFont() 36 | font.setFamily("YEEZY TSTAR") 37 | font.setPointSize(14) 38 | self.btnAdiCarter.setFont(font) 39 | self.btnAdiCarter.setAutoDefault(False) 40 | self.btnAdiCarter.setObjectName("btnAdiCarter") 41 | 42 | self.retranslateUi(Dialog) 43 | QtCore.QMetaObject.connectSlotsByName(Dialog) 44 | 45 | def retranslateUi(self, Dialog): 46 | _translate = QtCore.QCoreApplication.translate 47 | Dialog.setWindowTitle(_translate("Dialog", "Project Theta")) 48 | self.btnCaptchaHarv.setText(_translate("Dialog", "Captcha Harvester")) 49 | self.btnAccCreator.setText(_translate("Dialog", "Account Creator")) 50 | self.btnCaptchaEngine.setText(_translate("Dialog", "Captcha Engine")) 51 | self.btnAdiCarter.setText(_translate("Dialog", "Adidas Carter")) 52 | self.btnAdiCarter.clicked.connect(self.startAdiCarter) 53 | self.btnCaptchaEngine.clicked.connect(self.startCaptchaEngine) 54 | self.btnCaptchaHarv.clicked.connect(self.startCaptchaHarv) 55 | self.btnAccCreator.clicked.connect(self.startAccCreator) 56 | 57 | def startAdiCarter(self): 58 | self.AdiCarter = QtWidgets.QDialog() 59 | self.AdiCarterUI = adicarter.Ui_Dialog() 60 | self.AdiCarterUI.setupUi(self.AdiCarter) 61 | self.AdiCarter.show() 62 | 63 | def startCaptchaHarv(self): 64 | self.CaptchaHarv = QtWidgets.QDialog() 65 | self.CaptchaHarvUI = captchaharv.Ui_Dialog() 66 | self.CaptchaHarvUI.setupUi(self.CaptchaHarv) 67 | self.CaptchaHarv.show() 68 | 69 | def startCaptchaEngine(self): 70 | self.CaptchaEngine = QtWidgets.QDialog() 71 | self.CaptchaEngineUI = captchaengine.Ui_Dialog() 72 | self.CaptchaEngineUI.setupUi(self.CaptchaEngine) 73 | self.CaptchaEngine.show() 74 | 75 | def startAccCreator(self): 76 | self.AccCreator = QtWidgets.QDialog() 77 | self.AccCreatorUI = acccreator.Ui_dialog() 78 | self.AccCreatorUI.setupUi(self.AccCreator) 79 | self.AccCreator.show() 80 | 81 | 82 | if __name__ == "__main__": 83 | import sys 84 | app = QtWidgets.QApplication(sys.argv) 85 | Dialog = QtWidgets.QDialog() 86 | ui = Ui_Dialog() 87 | ui.setupUi(Dialog) 88 | Dialog.show() 89 | sys.exit(app.exec_()) 90 | -------------------------------------------------------------------------------- /classes/captchaengine.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtCore, QtGui, QtWidgets 2 | from python_anticaptcha import AnticaptchaClient, NoCaptchaTaskProxylessTask 3 | from classes.twocaptcha import TwoCaptchaCosmo 4 | import requests 5 | 6 | solve = True 7 | 8 | class antiCaptcha(QtCore.QThread): 9 | def __init__(self, apikey, sitekey, url): 10 | QtCore.QThread.__init__(self) 11 | self.apikey = apikey 12 | self.sitekey = sitekey 13 | self.url = url 14 | self.s = requests.Session() 15 | def run(self): 16 | global solve 17 | while solve: 18 | client = AnticaptchaClient(self.apikey) 19 | task = NoCaptchaTaskProxylessTask(self.url, self.sitekey) 20 | try: 21 | job = client.createTask(task) 22 | except Exception: 23 | print('Anti-Captcha Balance Zero') 24 | break 25 | job.join() 26 | payload = { 27 | 'g-recaptcha-response' : job.get_solution_response() 28 | } 29 | while True: 30 | try: 31 | self.s.post('http://127.0.0.1:5000/solve', data = payload) 32 | break 33 | except: 34 | print('Please Start Captcha Harvester. (THIS STORES THE TOKENS.)') 35 | print('Submitted Anti-Captcha') 36 | 37 | class twoCaptcha(QtCore.QThread): 38 | def __init__(self, apikey, sitekey, url): 39 | QtCore.QThread.__init__(self) 40 | self.apikey = apikey 41 | self.sitekey = sitekey 42 | self.url = url 43 | self.s = requests.Session() 44 | def run(self): 45 | while True: 46 | twoCaptcha = TwoCaptchaCosmo(self.apikey, self.sitekey, self.url) 47 | key = twoCaptcha.Solve() 48 | if 'ERROR' in key: 49 | print('Two Captcha Balance Zero') 50 | break 51 | payload = { 52 | 'g-recaptcha-response' : key 53 | } 54 | while True: 55 | try: 56 | self.s.post('http://127.0.0.1:5000/solve', data = payload) 57 | break 58 | except: 59 | print('Please Start Captcha Harvester. (THIS STORES THE TOKENS.)') 60 | print('Submitted 2Captcha') 61 | 62 | class Ui_Dialog(object): 63 | def setupUi(self, Dialog): 64 | Dialog.setObjectName("Dialog") 65 | Dialog.resize(400, 291) 66 | self.groupBox = QtWidgets.QGroupBox(Dialog) 67 | self.groupBox.setGeometry(QtCore.QRect(10, 10, 381, 61)) 68 | font = QtGui.QFont() 69 | font.setFamily("YEEZY TSTAR") 70 | font.setPointSize(14) 71 | self.groupBox.setFont(font) 72 | self.groupBox.setObjectName("groupBox") 73 | self.rad2CapOn = QtWidgets.QRadioButton(self.groupBox) 74 | self.rad2CapOn.setGeometry(QtCore.QRect(10, 34, 100, 20)) 75 | font = QtGui.QFont() 76 | font.setFamily("YEEZY TSTAR") 77 | font.setPointSize(14) 78 | self.rad2CapOn.setFont(font) 79 | self.rad2CapOn.setObjectName("rad2CapOn") 80 | self.rad2CapOff = QtWidgets.QRadioButton(self.groupBox) 81 | self.rad2CapOff.setGeometry(QtCore.QRect(70, 34, 100, 20)) 82 | font = QtGui.QFont() 83 | font.setFamily("YEEZY TSTAR") 84 | font.setPointSize(14) 85 | self.rad2CapOff.setFont(font) 86 | self.rad2CapOff.setObjectName("rad2CapOff") 87 | self.txtAPIKey2CAP = QtWidgets.QLineEdit(self.groupBox) 88 | self.txtAPIKey2CAP.setGeometry(QtCore.QRect(130, 33, 241, 22)) 89 | font = QtGui.QFont() 90 | font.setFamily("YEEZY TSTAR") 91 | font.setPointSize(14) 92 | self.txtAPIKey2CAP.setFont(font) 93 | self.txtAPIKey2CAP.setObjectName("txtAPIKey2CAP") 94 | self.groupBox_2 = QtWidgets.QGroupBox(Dialog) 95 | self.groupBox_2.setGeometry(QtCore.QRect(10, 80, 381, 61)) 96 | font = QtGui.QFont() 97 | font.setFamily("YEEZY TSTAR") 98 | font.setPointSize(14) 99 | self.groupBox_2.setFont(font) 100 | self.groupBox_2.setObjectName("groupBox_2") 101 | self.radAntiOn = QtWidgets.QRadioButton(self.groupBox_2) 102 | self.radAntiOn.setGeometry(QtCore.QRect(10, 34, 100, 20)) 103 | font = QtGui.QFont() 104 | font.setFamily("YEEZY TSTAR") 105 | font.setPointSize(14) 106 | self.radAntiOn.setFont(font) 107 | self.radAntiOn.setObjectName("radAntiOn") 108 | self.radAntiOff = QtWidgets.QRadioButton(self.groupBox_2) 109 | self.radAntiOff.setGeometry(QtCore.QRect(70, 34, 100, 20)) 110 | font = QtGui.QFont() 111 | font.setFamily("YEEZY TSTAR") 112 | font.setPointSize(14) 113 | self.radAntiOff.setFont(font) 114 | self.radAntiOff.setObjectName("radAntiOff") 115 | self.txtAPIKeyANTI = QtWidgets.QLineEdit(self.groupBox_2) 116 | self.txtAPIKeyANTI.setGeometry(QtCore.QRect(130, 34, 241, 22)) 117 | font = QtGui.QFont() 118 | font.setFamily("YEEZY TSTAR") 119 | font.setPointSize(14) 120 | self.txtAPIKeyANTI.setFont(font) 121 | self.txtAPIKeyANTI.setObjectName("txtAPIKeyANTI") 122 | self.label = QtWidgets.QLabel(Dialog) 123 | self.label.setGeometry(QtCore.QRect(20, 170, 321, 21)) 124 | font = QtGui.QFont() 125 | font.setFamily("YEEZY TSTAR") 126 | font.setPointSize(14) 127 | self.label.setFont(font) 128 | self.label.setObjectName("label") 129 | self.label_2 = QtWidgets.QLabel(Dialog) 130 | self.label_2.setGeometry(QtCore.QRect(20, 200, 181, 21)) 131 | font = QtGui.QFont() 132 | font.setFamily("YEEZY TSTAR") 133 | font.setPointSize(14) 134 | self.label_2.setFont(font) 135 | self.label_2.setObjectName("label_2") 136 | self.label_3 = QtWidgets.QLabel(Dialog) 137 | self.label_3.setGeometry(QtCore.QRect(20, 230, 181, 21)) 138 | font = QtGui.QFont() 139 | font.setFamily("YEEZY TSTAR") 140 | font.setPointSize(14) 141 | self.label_3.setFont(font) 142 | self.label_3.setObjectName("label_3") 143 | self.txtURL = QtWidgets.QLineEdit(Dialog) 144 | self.txtURL.setGeometry(QtCore.QRect(122, 200, 251, 22)) 145 | font = QtGui.QFont() 146 | font.setFamily("YEEZY TSTAR") 147 | font.setPointSize(14) 148 | self.txtURL.setFont(font) 149 | self.txtURL.setObjectName("txtURL") 150 | self.txtSitekey = QtWidgets.QLineEdit(Dialog) 151 | self.txtSitekey.setGeometry(QtCore.QRect(122, 230, 251, 22)) 152 | font = QtGui.QFont() 153 | font.setFamily("YEEZY TSTAR") 154 | font.setPointSize(14) 155 | self.txtSitekey.setFont(font) 156 | self.txtSitekey.setObjectName("txtSitekey") 157 | self.boxSolvers = QtWidgets.QSpinBox(Dialog) 158 | self.boxSolvers.setGeometry(QtCore.QRect(325, 170, 47, 23)) 159 | font = QtGui.QFont() 160 | font.setFamily("YEEZY TSTAR") 161 | font.setPointSize(14) 162 | self.boxSolvers.setFont(font) 163 | self.boxSolvers.setObjectName("boxSolvers") 164 | self.btnStart = QtWidgets.QPushButton(Dialog) 165 | self.btnStart.setGeometry(QtCore.QRect(290, 260, 81, 22)) 166 | font = QtGui.QFont() 167 | font.setFamily("YEEZY TSTAR") 168 | font.setPointSize(14) 169 | self.btnStart.setFont(font) 170 | self.btnStart.setAutoDefault(False) 171 | self.btnStart.setObjectName("btnStart") 172 | self.line = QtWidgets.QFrame(Dialog) 173 | self.line.setGeometry(QtCore.QRect(0, 150, 401, 16)) 174 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 175 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 176 | self.line.setObjectName("line") 177 | self.btnStop = QtWidgets.QPushButton(Dialog) 178 | self.btnStop.setGeometry(QtCore.QRect(200, 260, 81, 22)) 179 | font = QtGui.QFont() 180 | font.setFamily("YEEZY TSTAR") 181 | font.setPointSize(14) 182 | self.btnStop.setFont(font) 183 | self.btnStop.setAutoDefault(False) 184 | self.btnStop.setObjectName("btnStop") 185 | 186 | self.retranslateUi(Dialog) 187 | QtCore.QMetaObject.connectSlotsByName(Dialog) 188 | 189 | def retranslateUi(self, Dialog): 190 | _translate = QtCore.QCoreApplication.translate 191 | Dialog.setWindowTitle(_translate("Dialog", "Captcha Engine")) 192 | self.groupBox.setTitle(_translate("Dialog", "2Captcha")) 193 | self.rad2CapOn.setText(_translate("Dialog", "On")) 194 | self.rad2CapOff.setText(_translate("Dialog", "Off")) 195 | self.groupBox_2.setTitle(_translate("Dialog", "Anti-Captcha")) 196 | self.radAntiOn.setText(_translate("Dialog", "On")) 197 | self.radAntiOff.setText(_translate("Dialog", "Off")) 198 | self.label.setText(_translate("Dialog", "Concurrent Solvers per Service")) 199 | self.label_2.setText(_translate("Dialog", "URL")) 200 | self.label_3.setText(_translate("Dialog", "Sitekey")) 201 | self.btnStart.setText(_translate("Dialog", "Start")) 202 | self.btnStop.setText(_translate("Dialog", "Stop")) 203 | self.txtAPIKeyANTI.setDisabled(True) 204 | self.txtAPIKey2CAP.setDisabled(True) 205 | self.radAntiOn.toggled.connect(self.checkAnti) 206 | self.rad2CapOn.toggled.connect(self.check2Cap) 207 | self.btnStart.clicked.connect(self.getRecaptcha) 208 | self.btnStop.clicked.connect(self.stopRecaptcha) 209 | 210 | def checkAnti(self): 211 | if self.radAntiOn.isChecked(): 212 | self.txtAPIKeyANTI.setDisabled(False) 213 | elif self.radAntiOff.isChecked(): 214 | self.txtAPIKeyANTI.setDisabled(True) 215 | 216 | def check2Cap(self): 217 | if self.rad2CapOn.isChecked(): 218 | self.txtAPIKey2CAP.setDisabled(False) 219 | elif self.rad2CapOff.isChecked(): 220 | self.txtAPIKey2CAP.setDisabled(True) 221 | 222 | def getRecaptcha(self): 223 | global solve 224 | self.current = 0 225 | solve = True 226 | self.maxcount = int(self.boxSolvers.text()) 227 | self.antithread = [None] * self.maxcount 228 | self.twothread = [None] * self.maxcount 229 | self.antithreadstatus = [None] * self.maxcount 230 | self.twothreadstatus = [None] * self.maxcount 231 | 232 | while self.current < self.maxcount: 233 | if self.radAntiOn.isChecked(): 234 | self.antithread[self.current] = antiCaptcha(self.txtAPIKeyANTI.text(), self.txtSitekey.text(), self.txtURL.text()) 235 | self.antithread[self.current].start() 236 | self.antithreadstatus[self.current] = True 237 | if self.rad2CapOn.isChecked(): 238 | self.twothread[self.current] = twoCaptcha(self.txtAPIKeyANTI.text(), self.txtSitekey.text(), self.txtURL.text()) 239 | self.twothread[self.current].start() 240 | self.twothreadstatus[self.current] = True 241 | self.current += 1 242 | 243 | def stopRecaptcha(self): 244 | global solve 245 | solve = False 246 | 247 | 248 | if __name__ == "__main__": 249 | import sys 250 | app = QtWidgets.QApplication(sys.argv) 251 | Dialog = QtWidgets.QDialog() 252 | ui = Ui_Dialog() 253 | ui.setupUi(Dialog) 254 | Dialog.show() 255 | sys.exit(app.exec_()) 256 | -------------------------------------------------------------------------------- /classes/createadidas.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from bs4 import BeautifulSoup as bs 3 | from classes.fetchtoken import main as fetchtoken 4 | 5 | def createv2(first, last, email, password): 6 | try: 7 | s = requests.Session() 8 | s.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36' 9 | headers = { 10 | 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 11 | 'Accept-Encoding':'gzip, deflate, br', 12 | 'Accept-Language':'en-US,en;q=0.9', 13 | 'Cache-Control':'max-age=0', 14 | 'Connection':'keep-alive', 15 | 'Content-Length':'580', 16 | 'Content-Type':'application/x-www-form-urlencoded', 17 | 'DNT':'1', 18 | 'Host':'shop.miteam.adidas.us', 19 | 'Origin':'https://shop.miteam.adidas.us', 20 | 'Referer':'https://shop.miteam.adidas.us/miadidas-miteam/Logout.action', 21 | 'Upgrade-Insecure-Requests':'1' 22 | } 23 | res = s.get('http://www.miteam.adidas.us/on/demandware.store/Sites-miTeam-Site/en_US/Home-Show') 24 | res = s.get('https://shop.miteam.adidas.us/miadidas-miteam/Logout.action') 25 | soup = bs(res.text, 'lxml') 26 | payload = { 27 | 'registerUser' : soup.find('input', {'name':'registerUser'})['value'], 28 | 'sourcePath' : soup.find('input', {'name':'sourcePath'})['value'], 29 | 'recipeIdent' : soup.find('input', {'name':'recipeIdent'})['value'], 30 | 'orderId' : soup.find('input', {'name':'orderId'})['value'], 31 | 'minAge' : soup.find('input', {'name':'minAge'})['value'], 32 | 'userVO.userAuthentication.regFirstName' : first, 33 | 'userVO.userAuthentication.regLastName' : last, 34 | 'userVO.userAuthentication.regLogin' : email, 35 | 'userVO.userAuthentication.regPassword' : password, 36 | 'userVO.userAuthentication.confrmPassword' : password, 37 | 'userVO.newsUpdate' : 'false', 38 | 'agree' : 'true', 39 | 'userVO.dateVO.day' : '1', 40 | 'userVO.dateVO.month' : '1', 41 | 'userVO.dateVO.year' : '1953', 42 | '_sourcePage' : soup.find('input', {'name':'_sourcePage'})['value'], 43 | '__fp' : soup.find('input', {'name':'__fp'})['value'] 44 | } 45 | res = s.post('https://shop.miteam.adidas.us/miadidas-miteam/Login.action', data = payload, headers = headers) 46 | if login(email, password): 47 | return(True) 48 | else: 49 | print('Error : Failed Logging In') 50 | return(False) 51 | except Exception as f: 52 | print('Error : ' + f) 53 | return(False) 54 | 55 | 56 | def createaccount(first, last, email, password): 57 | try: 58 | s = requests.Session() 59 | s.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36' 60 | headers = { 61 | 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 62 | 'Accept-Encoding':'gzip, deflate, br', 63 | 'Accept-Language':'en-US,en;q=0.9', 64 | 'Cache-Control':'max-age=0', 65 | 'Connection':'keep-alive', 66 | 'Content-Length':'549', 67 | 'Content-Type':'application/x-www-form-urlencoded', 68 | 'DNT':'1', 69 | 'Host':'cp.adidas.co.uk', 70 | 'Origin':'https://cp.adidas.co.uk', 71 | 'Referer':'https://cp.adidas.co.uk/web/eCom/en_GB/accountcreate', 72 | 'Upgrade-Insecure-Requests':'1' 73 | } 74 | res = s.get('https://cp.adidas.co.uk/web/eCom/en_GB/loadcreateaccount') 75 | soup = bs(res.text, 'lxml') 76 | recaptoken = fetchtoken() 77 | payload = { 78 | 'firstName' : first, 79 | 'lastName' : last, 80 | 'day' : '4', 81 | 'month' : '4', 82 | 'year' : '1970', 83 | 'email' : email, 84 | 'password' : password, 85 | 'confirmPassword' : password, 86 | '_amf' : 'on', 87 | 'terms' : 'true', 88 | '_terms' : 'on', 89 | 'g-recaptcha-response' : recaptoken, 90 | 'metaAttrs[pageLoadedEarlier]':'true', 91 | 'app':'eCom', 92 | 'locale':'en_GB', 93 | 'domain':'', 94 | 'consentData1':'''I would like to stay up to date with adidas ''', 95 | 'consentData2':'''I agree to receiving personalised marketing messages about adidas products, events and promotions (including offers and discounts). adidas may contact me through the channels I select, such as email, SMS or post. What does this mean?''', 96 | 'consentData3':'''We, adidas International Trading B.V., or third parties on our behalf, may contact you with messages about adidas products, events and promotions or to ask your opinions when we conduct research. In order to provide you with the best personalised experience and to anticipate which of our products and services you might be interested in, we will create a profile based on the information we hold about you. To create this profile, we will store and analyse the personal data we have collected about you, including: 97 | - your name, date of birth and e-mail address. We may also store your telephone number or postal address if you choose to be contacted by post or SMS; 98 | - your preferences and interests that either you have actively shared with us through your adidas account or accounts or those that we have inferred through your registered interactions with adidas websites and apps (for which we may use cookies ); and 99 | - your shopping history, both online and offline. 100 | We will keep the profiles we create secure and we will not share them with any third parties other than those that we engage to provide services on our behalf. 101 | You are in charge, meaning we may contact you only through the channels selected by you, such as email, telephone, apps, SMS or post. If you wish to unsubscribe or to opt out of a particular channel, please follow the steps contained in the particular message or contact Customer Service. For more information, including on how to exercise your rights in relation to the personal data we hold about you, please read our Privacy Statement.''', 102 | 'CSRFToken': soup.find('input', {'name':'CSRFToken'})['value'] 103 | } 104 | res = s.post('https://cp.adidas.co.uk/web/eCom/en_GB/accountcreate', data = payload, headers = headers) 105 | if 'spsessionauthnadapterid' not in res.text.lower(): 106 | return(False) 107 | soup = bs(res.text, 'lxml') 108 | payload = { 109 | "IdpAdapterId" : soup.find('input', {'name':'IdpAdapterId'})['value'], 110 | "PartnerSpId" : soup.find('input', {'name':'PartnerSpId'})['value'], 111 | "SpSessionAuthnAdapterId" : soup.find('input', {'name':'SpSessionAuthnAdapterId'})['value'], 112 | "TargetResource" : soup.find('input', {'name':'TargetResource'})['value'], 113 | "InErrorResource" : soup.find('input', {'name':'InErrorResource'})['value'], 114 | "loginUrl" : soup.find('input', {'name':'loginUrl'})['value'], 115 | "cd" : soup.find('input', {'name':'cd'})['value'], 116 | "username" : soup.find('input', {'name':'username'})['value'], 117 | "password" : soup.find('input', {'name':'password'})['value'], 118 | "validator_id" : soup.find('input', {'name':'validator_id'})['value'], 119 | "app" : soup.find('input', {'name':'app'})['value'] 120 | } 121 | res = s.post('https://cp.adidas.co.uk/idp/startSSO.ping', data = payload, headers = headers) 122 | resumeurl = res.text[res.text.find('cp.adidas.co.uk/idp')+15:res.text.find('resumeSAML20')+30] 123 | resumeurldata = res.text[res.text.find('cp.adidas.co.uk/idp')+15:res.text.find('resumeSAML20')+30].replace('/','%2f') 124 | resumeurldata2 = 'eCom|en_GB|cp.adidas.co.uk|null'.replace('|', '%7C') 125 | geturl = res.text[res.text.find('https://cp.adidasspecialty'):res.text.find('ssoiniturl')+32].replace('amp;','') 126 | res = s.get('https://cp.adidas.co.uk/web/ssoCookieCreate?' + resumeurldata + '&' + resumeurldata2, headers = headers) 127 | return(True) 128 | except Exception as f: 129 | print('Error : ' + f) 130 | return(False) 131 | 132 | def login(email, passw): 133 | try: 134 | s = requests.Session() 135 | s.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36' 136 | headers = { 137 | 'Origin':'https://cp.adidas.co.uk', 138 | 'Referer':'https://cp.adidas.co.uk', 139 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 140 | } 141 | res = s.get('https://cp.adidas.co.uk/web/eCom/en_GB/loadsignin?target=account', headers = headers) 142 | soup = bs(res.text, 'lxml') 143 | payload = { 144 | 'username': email, 145 | 'password': passw, 146 | 'signinSubmit': 'Sign in' 147 | } 148 | payload['IdpAdapterId'] = soup.find('input', {'name':'IdpAdapterId'})['value'] 149 | payload['SpSessionAuthnAdapterId'] = soup.find('input', {'name':'SpSessionAuthnAdapterId'})['value'] 150 | payload['PartnerSpId'] = soup.find('input', {'name':'PartnerSpId'})['value'] 151 | payload['remembermeParam'] = soup.find('input', {'name':'remembermeParam'})['value'] 152 | payload['validator_id'] = soup.find('input', {'name':'validator_id'})['value'] 153 | payload['TargetResource'] = soup.find('input', {'name':'TargetResource'})['value'] 154 | payload['InErrorResource'] = soup.find('input', {'name':'InErrorResource'})['value'] 155 | payload['loginUrl'] = soup.find('input', {'name':'loginUrl'})['value'] 156 | payload['cd'] = soup.find('input', {'name':'cd'})['value'] 157 | payload['app'] = soup.find('input', {'name':'app'})['value'] 158 | payload['locale'] = soup.find('input', {'name':'locale'})['value'] 159 | payload['domain'] = soup.find('input', {'name':'domain'})['value'] 160 | payload['email'] = soup.find('input', {'name':'email'})['value'] 161 | payload['pfRedirectBaseURL_test'] = soup.find('input', {'name':'pfRedirectBaseURL_test'})['value'] 162 | payload['pfStartSSOURL_test'] = soup.find('input', {'name':'pfStartSSOURL_test'})['value'] 163 | payload['resumeURL_test'] = soup.find('input', {'name':'resumeURL_test'})['value'] 164 | payload['FromFinishRegistraion'] = soup.find('input', {'name':'FromFinishRegistraion'})['value'] 165 | payload['CSRFToken'] = soup.find('input', {'name':'CSRFToken'})['value'] 166 | res = s.post('https://cp.adidas.co.uk/idp/startSSO.ping', data = payload, headers = headers) 167 | sub = res.text[res.text.find('/idp/')+5:] 168 | firststring = sub[:sub.find('/idp/')] 169 | secondstring = sub[sub.find('/idp/')+5:sub.find("'")] 170 | url = '/idp/' + firststring + '/idp/' + secondstring 171 | res = s.get('https://cp.adidas.co.uk/web/ssoCookieCreate?resume={}&cd={}|{}|{}|null'.format(url.replace(' ', '%7C'), payload['cd'].replace(' ', '%7C'), payload['locale'].replace(' ', '%7C'), payload['domain'].replace(' ', '%7C')), headers = headers) 172 | #soup = bs(res.text, 'lxml') 173 | #nexturl = soup.find('img')['src'] 174 | #self.s.get(nexturl) 175 | res = s.get('https://cp.adidas.co.uk' + url, headers = headers) 176 | soup = bs(res.text, 'lxml') 177 | payload = { 178 | 'RelayState':soup.find('input', {'name':'RelayState'})['value'], 179 | 'SAMLResponse':soup.find('input', {'name': 'SAMLResponse'})['value'] 180 | } 181 | res = s.post('https://cp.adidas.co.uk/sp/ACS.saml2', data = payload, headers = headers) 182 | soup = bs(res.text, 'lxml') 183 | payload = { 184 | 'REF':soup.find('input', {'name':'REF'})['value'], 185 | 'TargetResource':soup.find('input', {'name':'TargetResource'})['value'] 186 | } 187 | res = s.post('https://www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB/MyAccount-ResumeLogin', headers = headers, data = payload) 188 | return(True) 189 | except: 190 | return(False) 191 | -------------------------------------------------------------------------------- /classes/adicarter.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtCore, QtGui, QtWidgets 2 | from classes import adidas 3 | from datetime import datetime 4 | import random, time 5 | 6 | class Ui_Dialog(object): 7 | def setupUi(self, Dialog): 8 | Dialog.setObjectName("Dialog") 9 | Dialog.resize(1281, 498) 10 | self.txtSKU = QtWidgets.QLineEdit(Dialog) 11 | self.txtSKU.setGeometry(QtCore.QRect(90, 388, 191, 21)) 12 | font = QtGui.QFont() 13 | font.setFamily("YEEZY TSTAR") 14 | font.setPointSize(14) 15 | self.txtSKU.setFont(font) 16 | self.txtSKU.setObjectName("txtSKU") 17 | self.label = QtWidgets.QLabel(Dialog) 18 | self.label.setGeometry(QtCore.QRect(20, 390, 60, 16)) 19 | font = QtGui.QFont() 20 | font.setFamily("YEEZY TSTAR") 21 | font.setPointSize(14) 22 | self.label.setFont(font) 23 | self.label.setObjectName("label") 24 | self.boxSize = QtWidgets.QComboBox(Dialog) 25 | self.boxSize.setGeometry(QtCore.QRect(90, 418, 191, 26)) 26 | font = QtGui.QFont() 27 | font.setFamily("YEEZY TSTAR") 28 | font.setPointSize(14) 29 | self.boxSize.setFont(font) 30 | self.boxSize.setObjectName("boxSize") 31 | self.boxSize.addItem("") 32 | self.boxSize.addItem("") 33 | self.boxSize.addItem("") 34 | self.boxSize.addItem("") 35 | self.boxSize.addItem("") 36 | self.boxSize.addItem("") 37 | self.boxSize.addItem("") 38 | self.boxSize.addItem("") 39 | self.boxSize.addItem("") 40 | self.boxSize.addItem("") 41 | self.boxSize.addItem("") 42 | self.boxSize.addItem("") 43 | self.boxSize.addItem("") 44 | self.boxSize.addItem("") 45 | self.boxSize.addItem("") 46 | self.boxSize.addItem("") 47 | self.boxSize.addItem("") 48 | self.boxSize.addItem("") 49 | self.boxSize.addItem("") 50 | self.boxSize.addItem("") 51 | self.label_2 = QtWidgets.QLabel(Dialog) 52 | self.label_2.setGeometry(QtCore.QRect(20, 422, 60, 16)) 53 | font = QtGui.QFont() 54 | font.setFamily("YEEZY TSTAR") 55 | font.setPointSize(14) 56 | self.label_2.setFont(font) 57 | self.label_2.setObjectName("label_2") 58 | self.btnAddTask = QtWidgets.QPushButton(Dialog) 59 | self.btnAddTask.setGeometry(QtCore.QRect(20, 460, 261, 32)) 60 | font = QtGui.QFont() 61 | font.setFamily("YEEZY TSTAR") 62 | font.setPointSize(14) 63 | self.btnAddTask.setFont(font) 64 | self.btnAddTask.setAutoDefault(False) 65 | self.btnAddTask.setObjectName("btnAddTask") 66 | self.tableProxies = QtWidgets.QTableWidget(Dialog) 67 | self.tableProxies.setGeometry(QtCore.QRect(20, 11, 261, 321)) 68 | font = QtGui.QFont() 69 | font.setFamily("YEEZY TSTAR") 70 | font.setPointSize(10) 71 | self.tableProxies.setFont(font) 72 | self.tableProxies.setObjectName("tableProxies") 73 | self.tableProxies.setColumnCount(2) 74 | self.tableProxies.setRowCount(0) 75 | item = QtWidgets.QTableWidgetItem() 76 | self.tableProxies.setHorizontalHeaderItem(0, item) 77 | item = QtWidgets.QTableWidgetItem() 78 | self.tableProxies.setHorizontalHeaderItem(1, item) 79 | self.tableProxies.horizontalHeader().setDefaultSectionSize(115) 80 | self.tableProxies.horizontalHeader().setStretchLastSection(True) 81 | self.btnProxies = QtWidgets.QPushButton(Dialog) 82 | self.btnProxies.setGeometry(QtCore.QRect(20, 340, 261, 32)) 83 | font = QtGui.QFont() 84 | font.setFamily("YEEZY TSTAR") 85 | font.setPointSize(14) 86 | self.btnProxies.setFont(font) 87 | self.btnProxies.setAutoDefault(False) 88 | self.btnProxies.setObjectName("btnProxies") 89 | self.tableTasks = QtWidgets.QTableWidget(Dialog) 90 | self.tableTasks.setGeometry(QtCore.QRect(300, 10, 971, 441)) 91 | font = QtGui.QFont() 92 | font.setFamily("YEEZY TSTAR") 93 | font.setPointSize(10) 94 | self.tableTasks.setFont(font) 95 | self.tableTasks.setObjectName("tableTasks") 96 | self.tableTasks.setColumnCount(4) 97 | self.tableTasks.setRowCount(0) 98 | item = QtWidgets.QTableWidgetItem() 99 | self.tableTasks.setHorizontalHeaderItem(0, item) 100 | item = QtWidgets.QTableWidgetItem() 101 | self.tableTasks.setHorizontalHeaderItem(1, item) 102 | item = QtWidgets.QTableWidgetItem() 103 | self.tableTasks.setHorizontalHeaderItem(2, item) 104 | item = QtWidgets.QTableWidgetItem() 105 | self.tableTasks.setHorizontalHeaderItem(3, item) 106 | self.tableTasks.horizontalHeader().setDefaultSectionSize(130) 107 | self.tableTasks.horizontalHeader().setStretchLastSection(True) 108 | self.timeStart = QtWidgets.QTimeEdit(Dialog) 109 | self.timeStart.setGeometry(QtCore.QRect(1150, 463, 118, 24)) 110 | font = QtGui.QFont() 111 | font.setFamily("YEEZY TSTAR") 112 | font.setPointSize(14) 113 | self.timeStart.setFont(font) 114 | self.timeStart.setObjectName("timeStart") 115 | self.btnStartTask = QtWidgets.QPushButton(Dialog) 116 | self.btnStartTask.setGeometry(QtCore.QRect(1022, 460, 121, 32)) 117 | font = QtGui.QFont() 118 | font.setFamily("YEEZY TSTAR") 119 | font.setPointSize(14) 120 | self.btnStartTask.setFont(font) 121 | self.btnStartTask.setAutoDefault(False) 122 | self.btnStartTask.setObjectName("btnStartTask") 123 | self.line = QtWidgets.QFrame(Dialog) 124 | self.line.setGeometry(QtCore.QRect(0, 370, 291, 16)) 125 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 126 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 127 | self.line.setObjectName("line") 128 | self.line_2 = QtWidgets.QFrame(Dialog) 129 | self.line_2.setGeometry(QtCore.QRect(280, 0, 20, 501)) 130 | self.line_2.setFrameShape(QtWidgets.QFrame.VLine) 131 | self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) 132 | self.line_2.setObjectName("line_2") 133 | 134 | self.retranslateUi(Dialog) 135 | QtCore.QMetaObject.connectSlotsByName(Dialog) 136 | 137 | def retranslateUi(self, Dialog): 138 | _translate = QtCore.QCoreApplication.translate 139 | Dialog.setWindowTitle(_translate("Dialog", "Dyspo")) 140 | self.label.setText(_translate("Dialog", "SKU")) 141 | self.boxSize.setItemText(0, _translate("Dialog", "4.0")) 142 | self.boxSize.setItemText(1, _translate("Dialog", "4.5")) 143 | self.boxSize.setItemText(2, _translate("Dialog", "5.0")) 144 | self.boxSize.setItemText(3, _translate("Dialog", "5.5")) 145 | self.boxSize.setItemText(4, _translate("Dialog", "6.0")) 146 | self.boxSize.setItemText(5, _translate("Dialog", "6.5")) 147 | self.boxSize.setItemText(6, _translate("Dialog", "7.0")) 148 | self.boxSize.setItemText(7, _translate("Dialog", "7.5")) 149 | self.boxSize.setItemText(8, _translate("Dialog", "8.0")) 150 | self.boxSize.setItemText(9, _translate("Dialog", "8.5")) 151 | self.boxSize.setItemText(10, _translate("Dialog", "9.0")) 152 | self.boxSize.setItemText(11, _translate("Dialog", "9.5")) 153 | self.boxSize.setItemText(12, _translate("Dialog", "10.0")) 154 | self.boxSize.setItemText(13, _translate("Dialog", "10.5")) 155 | self.boxSize.setItemText(14, _translate("Dialog", "11.0")) 156 | self.boxSize.setItemText(15, _translate("Dialog", "11.5")) 157 | self.boxSize.setItemText(16, _translate("Dialog", "12.0")) 158 | self.boxSize.setItemText(17, _translate("Dialog", "12.5")) 159 | self.boxSize.setItemText(18, _translate("Dialog", "13.0")) 160 | self.boxSize.setItemText(19, _translate("Dialog", "FSR")) 161 | self.label_2.setText(_translate("Dialog", "Size")) 162 | self.btnAddTask.setText(_translate("Dialog", "Add Task")) 163 | item = self.tableProxies.horizontalHeaderItem(0) 164 | item.setText(_translate("Dialog", "Type")) 165 | item = self.tableProxies.horizontalHeaderItem(1) 166 | item.setText(_translate("Dialog", "Address")) 167 | self.btnProxies.setText(_translate("Dialog", "Load Proxies")) 168 | item = self.tableTasks.horizontalHeaderItem(0) 169 | item.setText(_translate("Dialog", "Status")) 170 | item = self.tableTasks.horizontalHeaderItem(1) 171 | item.setText(_translate("Dialog", "SKU")) 172 | item = self.tableTasks.horizontalHeaderItem(2) 173 | item.setText(_translate("Dialog", "Size")) 174 | item = self.tableTasks.horizontalHeaderItem(3) 175 | item.setText(_translate("Dialog", "Proxy")) 176 | self.btnStartTask.setText(_translate("Dialog", "Start Tasks @")) 177 | self.threads = [None] * 9999 178 | self.btnAddTask.clicked.connect(self.addtasks) 179 | self.btnStartTask.clicked.connect(self.starttask) 180 | self.btnProxies.clicked.connect(self.loadproxies) 181 | 182 | def loadproxies(self): 183 | directory = QtWidgets.QFileDialog.getOpenFileName()[0] 184 | proxylist = [] 185 | with open(directory, 'r') as g: 186 | for line in g: 187 | item = {'type' : line[0:line.find('://')].replace('\n', ''), 'address' : line[line.find('://')+3:].replace('\n', '')} 188 | proxylist.append(item) 189 | for item in proxylist: 190 | height = self.tableProxies.rowCount() 191 | self.tableProxies.insertRow(height) 192 | self.tableProxies.setItem(height, 0, QtWidgets.QTableWidgetItem(item['type'])) 193 | self.tableProxies.setItem(height, 1, QtWidgets.QTableWidgetItem(item['address'])) 194 | 195 | def addtasks(self): 196 | height = self.tableProxies.rowCount() 197 | index = 0 198 | while index < height: 199 | self.tableTasks.insertRow(index) 200 | self.tableTasks.setItem(index, 0, QtWidgets.QTableWidgetItem('Not Started')) 201 | self.tableTasks.setItem(index, 1, QtWidgets.QTableWidgetItem(self.txtSKU.text())) 202 | if self.boxSize.currentText().lower() == 'fsr': 203 | self.tableTasks.setItem(index, 2, QtWidgets.QTableWidgetItem(random.choice(['4.0','4.5','5.0','5.5','6.0','6.5','7.0','7.5','8.0','8.5','9.0','9.5','10.0','10.5','11.0','11.5','12.0','12.5','13.0']))) 204 | else: 205 | self.tableTasks.setItem(index, 2, QtWidgets.QTableWidgetItem(self.boxSize.currentText())) 206 | if self.tableProxies.item(index, 0).text().lower() == 'socks5': 207 | self.tableTasks.setItem(index, 3, QtWidgets.QTableWidgetItem('socks5://' + self.tableProxies.item(index, 1).text())) 208 | elif self.tableProxies.item(index, 0).text().lower() == 'http': 209 | self.tableTasks.setItem(index, 3, QtWidgets.QTableWidgetItem('http://' + self.tableProxies.item(index, 1).text())) 210 | index += 1 211 | 212 | def starttask(self): 213 | height = self.tableTasks.rowCount() 214 | index = 0 215 | starttime = datetime.strptime(datetime.now().strftime('%d-%b-%Y ') + self.timeStart.text(), '%d-%b-%Y %I:%M %p') 216 | while index < height: 217 | self.threads[index] = adiCart(self.tableTasks.item(index, 1).text(), self.tableTasks.item(index, 2).text(), self.tableTasks.item(index, 3).text(), starttime, index) 218 | self.threads[index].status.connect(self.updateTasks) 219 | self.threads[index].start() 220 | index += 1 221 | 222 | def updateTasks(self, data): 223 | self.tableTasks.setItem(data[1], 0, QtWidgets.QTableWidgetItem(data[0])) 224 | 225 | class adiCart(QtCore.QThread): 226 | status = QtCore.pyqtSignal(object) 227 | 228 | def __init__(self, sku, size, proxy, starttime, height): 229 | QtCore.QThread.__init__(self) 230 | self.sku = sku 231 | self.size = size 232 | self.proxy = proxy 233 | self.starttime = starttime 234 | self.height = height 235 | 236 | def run(self): 237 | self.status.emit(['Initializing', self.height]) 238 | self.s = adidas.adidas('US', self.proxy) 239 | self.s.setupatc(self.sku) 240 | self.status.emit(['Waiting...', self.height]) 241 | while True: 242 | if datetime.now() > self.starttime: 243 | break 244 | while True: 245 | checkstock = self.s.checkstock(self.sku, self.size) 246 | if checkstock: 247 | self.status.emit(['In Stock, Carting...', self.height]) 248 | break 249 | elif checkstock == False: 250 | self.status.emit(['OOS, Waiting', self.height]) 251 | time.sleep(5) 252 | self.status.emit(['Need Recap Token!', self.height]) 253 | while True: 254 | if self.s.atcwrecaptcha(self.sku, self.size): 255 | break 256 | else: 257 | self.status.emit(['Failed Cart, Checking Stock...', self.height]) 258 | while True: 259 | checkstock = self.s.checkstock(self.sku, self.size) 260 | if checkstock: 261 | break 262 | else: 263 | self.status.emit(['OOS, Waiting', self.height]) 264 | time.sleep(5) 265 | self.status.emit(['Carted', self.height]) 266 | self.s.opencart() 267 | self.s.chrome.get('https://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/Cart-Show') 268 | 269 | 270 | if __name__ == "__main__": 271 | import sys 272 | app = QtWidgets.QApplication(sys.argv) 273 | Dialog = QtWidgets.QDialog() 274 | ui = Ui_Dialog() 275 | ui.setupUi(Dialog) 276 | Dialog.show() 277 | sys.exit(app.exec_()) 278 | -------------------------------------------------------------------------------- /classes/acccreator.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtCore, QtGui, QtWidgets 2 | import random 3 | from classes.createadidas import createaccount, createv2 4 | 5 | class createAccounts(QtCore.QThread): 6 | def __init__(self, email, style, maxcount): 7 | QtCore.QThread.__init__(self) 8 | self.email = email 9 | self.style = style 10 | self.maxcount = maxcount 11 | self.firstnames = ['james', 'john', 'robert', 'michael', 'william', 'david', 'richard', 'charles', 'joseph', 'thomas', 'christopher', 'daniel', 'paul', 'mark', 'donald', 'george', 'kenneth', 'steven', 'edward', 'brian', 'ronald', 'anthony', 'kevin', 'jason', 'matthew', 'gary', 'timothy', 'jose', 'larry', 'jeffrey', 'frank', 'scott', 'eric', 'stephen', 'andrew', 'raymond', 'gregory', 'joshua', 'jerry', 'dennis', 'walter', 'patrick', 'peter', 'harold', 'douglas', 'henry', 'carl', 'arthur', 'ryan', 'roger', 'joe', 'juan', 'jack', 'albert', 'jonathan', 'justin', 'terry', 'gerald', 'keith', 'samuel', 'willie', 'ralph', 'lawrence', 'nicholas', 'roy', 'benjamin', 'bruce', 'brandon', 'adam', 'harry', 'fred', 'wayne', 'billy', 'steve', 'louis', 'jeremy', 'aaron', 'randy', 'howard', 'eugene', 'carlos', 'russell', 'bobby', 'victor', 'martin', 'ernest', 'phillip', 'todd', 'jesse', 'craig', 'alan', 'shawn', 'clarence', 'sean', 'philip', 'chris', 'johnny', 'earl', 'jimmy', 'antonio', 'danny', 'bryan', 'tony', 'luis', 'mike', 'stanley', 'leonard', 'nathan', 'dale', 'manuel', 'rodney', 'curtis', 'norman', 'allen', 'marvin', 'vincent', 'glenn', 'jeffery', 'travis', 'jeff', 'chad', 'jacob', 'lee', 'melvin', 'alfred', 'kyle', 'francis', 'bradley', 'jesus', 'herbert', 'frederick', 'ray', 'joel', 'edwin', 'don', 'eddie', 'ricky', 'troy', 'randall', 'barry', 'alexander', 'bernard', 'mario', 'leroy', 'francisco', 'marcus', 'micheal', 'theodore', 'clifford', 'miguel', 'oscar', 'jay', 'jim', 'tom', 'calvin', 'alex', 'jon', 'ronnie', 'bill', 'lloyd', 'tommy', 'leon', 'derek', 'warren', 'darrell', 'jerome', 'floyd', 'leo', 'alvin', 'tim', 'wesley', 'gordon', 'dean', 'greg', 'jorge', 'dustin', 'pedro', 'derrick', 'dan', 'lewis', 'zachary', 'corey', 'herman', 'maurice', 'vernon', 'roberto', 'clyde', 'glen', 'hector', 'shane', 'ricardo', 'sam', 'rick', 'lester', 'brent', 'ramon', 'charlie', 'tyler', 'gilbert', 'gene', 'marc', 'reginald', 'ruben', 'brett', 'angel', 'nathaniel', 'rafael', 'leslie', 'edgar', 'milton', 'raul', 'ben', 'chester', 'cecil', 'duane', 'franklin', 'andre', 'elmer', 'brad', 'gabriel', 'ron', 'mitchell', 'roland', 'arnold', 'harvey', 'jared', 'adrian', 'karl', 'cory', 'claude', 'erik', 'darryl', 'jamie', 'neil', 'jessie', 'christian', 'javier', 'fernando', 'clinton', 'ted', 'mathew', 'tyrone', 'darren', 'lonnie', 'lance', 'cody', 'julio', 'kelly', 'kurt', 'allan', 'nelson', 'guy', 'clayton', 'hugh', 'max', 'dwayne', 'dwight', 'armando', 'felix', 'jimmie', 'everett', 'jordan', 'ian', 'wallace', 'ken', 'bob', 'jaime', 'casey', 'alfredo', 'alberto', 'dave', 'ivan', 'johnnie', 'sidney', 'byron', 'julian', 'isaac', 'morris', 'clifton', 'willard', 'daryl', 'ross', 'virgil', 'andy', 'marshall', 'salvador', 'perry', 'kirk', 'sergio', 'marion', 'tracy', 'seth', 'kent', 'terrance', 'rene', 'eduardo', 'terrence', 'enrique', 'freddie', 'wade'] 12 | self.lastnames = ['smith', 'johnson', 'williams', 'brown', 'jones', 'miller', 'davis', 'garcia', 'rodriguez', 'wilson', 'martinez', 'anderson', 'taylor', 'thomas', 'hernandez', 'moore', 'martin', 'jackson', 'thompson', 'white', 'lopez', 'lee', 'gonzalez', 'harris', 'clark', 'lewis', 'robinson', 'walker', 'perez', 'hall', 'young', 'allen', 'sanchez', 'wright', 'king', 'scott', 'green', 'baker', 'adams', 'nelson', 'hill', 'ramirez', 'campbell', 'mitchell', 'roberts', 'carter', 'phillips', 'evans', 'turner', 'torres', 'parker', 'collins', 'edwards', 'stewart', 'flores', 'morris', 'nguyen', 'murphy', 'rivera', 'cook', 'rogers', 'morgan', 'peterson', 'cooper', 'reed', 'bailey', 'bell', 'gomez', 'kelly', 'howard', 'ward', 'cox', 'diaz', 'richardson', 'wood', 'watson', 'brooks', 'bennett', 'gray', 'james', 'reyes', 'cruz', 'hughes', 'price', 'myers', 'long', 'foster', 'sanders', 'ross', 'morales', 'powell', 'sullivan', 'russell', 'ortiz', 'jenkins', 'gutierrez', 'perry', 'butler', 'barnes', 'fisher', 'henderson', 'coleman', 'simmons', 'patterson', 'jordan', 'reynolds', 'hamilton', 'graham', 'kim', 'gonzales', 'alexander', 'ramos', 'wallace', 'griffin', 'west', 'cole', 'hayes', 'chavez', 'gibson', 'bryant', 'ellis', 'stevens', 'murray', 'ford', 'marshall', 'owens', 'mcdonald', 'harrison', 'ruiz', 'kennedy', 'wells', 'alvarez', 'woods', 'mendoza', 'castillo', 'olson', 'webb', 'washington', 'tucker', 'freeman', 'burns', 'henry', 'vasquez', 'snyder', 'simpson', 'crawford', 'jimenez', 'porter', 'mason', 'shaw', 'gordon', 'wagner', 'hunter', 'romero', 'hicks', 'dixon', 'hunt', 'palmer', 'robertson', 'black', 'holmes', 'stone', 'meyer', 'boyd', 'mills', 'warren', 'fox', 'rose', 'rice', 'moreno', 'schmidt', 'patel', 'ferguson', 'nichols', 'herrera', 'medina', 'ryan', 'fernandez', 'weaver', 'daniels', 'stephens', 'gardner', 'payne', 'kelley', 'dunn', 'pierce', 'arnold', 'tran', 'spencer', 'peters', 'hawkins', 'grant', 'hansen', 'castro', 'hoffman', 'hart', 'elliott', 'cunningham', 'knight', 'bradley', 'carroll', 'hudson', 'duncan', 'armstrong', 'berry', 'andrews', 'johnston', 'ray', 'lane', 'riley', 'carpenter', 'perkins', 'aguilar', 'silva', 'richards', 'willis', 'matthews', 'chapman', 'lawrence', 'garza', 'vargas', 'watkins', 'wheeler', 'larson', 'carlson', 'harper', 'george', 'greene', 'burke', 'guzman', 'morrison', 'munoz', 'jacobs', 'obrien', 'lawson', 'franklin', 'lynch', 'bishop', 'carr', 'salazar', 'austin', 'mendez', 'gilbert', 'jensen', 'williamson', 'montgomery', 'harvey', 'oliver', 'howell', 'dean', 'hanson', 'weber', 'garrett', 'sims', 'burton', 'fuller', 'soto', 'mccoy', 'welch', 'chen', 'schultz', 'walters', 'reid', 'fields', 'walsh', 'little', 'fowler', 'bowman', 'davidson', 'may', 'day', 'schneider', 'newman', 'brewer', 'lucas', 'holland', 'wong', 'banks', 'santos', 'curtis', 'pearson', 'delgado', 'valdez', 'pena', 'rios', 'douglas', 'sandoval', 'barrett', 'hopkins', 'keller', 'guerrero', 'stanley', 'bates', 'alvarado', 'beck', 'ortega', 'wade', 'estrada', 'contreras', 'barnett', 'caldwell', 'santiago', 'lambert', 'powers', 'chambers', 'nunez', 'craig', 'leonard', 'lowe', 'rhodes', 'byrd', 'gregory', 'shelton', 'frazier', 'becker', 'maldonado', 'fleming', 'vega', 'sutton', 'cohen', 'jennings', 'parks', 'mcdaniel', 'watts', 'barker', 'norris', 'vaughn', 'vazquez', 'holt', 'schwartz', 'steele', 'benson', 'neal', 'dominguez', 'horton', 'terry', 'wolfe', 'hale', 'lyons', 'graves', 'haynes', 'miles', 'park', 'warner', 'padilla', 'bush', 'thornton', 'mccarthy', 'mann', 'zimmerman', 'erickson', 'fletcher', 'mckinney', 'page', 'dawson', 'joseph', 'marquez', 'reeves', 'klein', 'espinoza', 'baldwin', 'moran', 'love', 'robbins', 'higgins', 'ball', 'cortez', 'le', 'griffith', 'bowen', 'sharp', 'cummings', 'ramsey', 'hardy', 'swanson', 'barber', 'acosta', 'luna', 'chandler', 'daniel', 'blair', 'cross', 'simon', 'dennis', 'oconnor', 'quinn', 'gross', 'navarro', 'moss', 'fitzgerald', 'doyle', 'mclaughlin', 'rojas', 'rodgers', 'stevenson', 'singh', 'yang', 'figueroa', 'harmon', 'newton', 'paul', 'manning', 'garner', 'mcgee', 'reese', 'francis', 'burgess', 'adkins', 'goodman', 'curry', 'brady', 'christensen', 'potter', 'walton', 'goodwin', 'mullins', 'molina', 'webster', 'fischer', 'campos', 'avila', 'sherman', 'todd', 'chang', 'blake', 'malone', 'wolf', 'hodges', 'juarez', 'gill', 'farmer', 'hines', 'gallagher', 'duran', 'hubbard', 'cannon', 'miranda', 'wang', 'saunders', 'tate', 'mack', 'hammond', 'carrillo', 'townsend', 'wise', 'ingram', 'barton', 'mejia', 'ayala', 'schroeder', 'hampton', 'rowe', 'parsons', 'frank', 'waters', 'strickland', 'osborne', 'maxwell', 'chan', 'deleon', 'norman', 'harrington', 'casey', 'patton', 'logan', 'bowers', 'mueller', 'glover', 'floyd', 'hartman', 'buchanan', 'cobb', 'french', 'kramer', 'mccormick', 'clarke', 'tyler', 'gibbs', 'moody', 'conner', 'sparks', 'mcguire', 'leon', 'bauer', 'norton', 'pope', 'flynn', 'hogan', 'robles', 'salinas', 'yates', 'lindsey', 'lloyd', 'marsh', 'mcbride', 'owen', 'solis', 'pham', 'lang', 'pratt', 'lara', 'brock', 'ballard', 'trujillo', 'shaffer', 'drake', 'roman', 'aguirre', 'morton', 'stokes', 'lamb', 'pacheco', 'patrick', 'cochran', 'shepherd', 'cain', 'burnett', 'hess', 'li', 'cervantes', 'olsen', 'briggs', 'ochoa', 'cabrera', 'velasquez', 'montoya', 'roth', 'meyers', 'cardenas', 'fuentes', 'weiss', 'wilkins', 'hoover', 'nicholson', 'underwood', 'short', 'carson', 'morrow', 'colon', 'holloway', 'summers', 'bryan', 'petersen', 'mckenzie', 'serrano', 'wilcox', 'carey', 'clayton', 'poole', 'calderon', 'gallegos', 'greer', 'rivas', 'guerra', 'decker', 'collier', 'wall', 'whitaker', 'bass', 'flowers', 'davenport', 'conley', 'houston', 'huff', 'copeland', 'hood', 'monroe', 'massey', 'roberson', 'combs', 'franco', 'larsen', 'pittman', 'randall', 'skinner', 'wilkinson', 'kirby', 'cameron', 'bridges', 'anthony', 'richard', 'kirk', 'bruce', 'singleton', 'mathis', 'bradford', 'boone', 'abbott', 'charles', 'allison', 'sweeney', 'atkinson', 'horn', 'jefferson', 'rosales', 'york', 'christian', 'phelps', 'farrell', 'castaneda', 'nash', 'dickerson', 'bond', 'wyatt', 'foley', 'chase', 'gates', 'vincent', 'mathews', 'hodge', 'garrison', 'trevino', 'villarreal', 'heath', 'dalton', 'valencia', 'callahan', 'hensley', 'atkins', 'huffman', 'roy', 'boyer', 'shields', 'lin', 'hancock', 'grimes', 'glenn', 'cline', 'delacruz', 'camacho', 'dillon', 'parrish', 'oneill', 'melton', 'booth', 'kane', 'berg', 'harrell', 'pitts', 'savage', 'wiggins', 'brennan', 'salas', 'marks', 'russo', 'sawyer', 'baxter', 'golden', 'hutchinson', 'liu', 'walter', 'mcdowell', 'wiley', 'rich', 'humphrey', 'johns', 'koch', 'suarez', 'hobbs', 'beard', 'gilmore', 'ibarra', 'keith', 'macias', 'khan', 'andrade', 'ware', 'stephenson', 'henson', 'wilkerson', 'dyer', 'mcclure', 'blackwell', 'mercado', 'tanner', 'eaton', 'clay', 'barron', 'beasley', 'oneal', 'small', 'preston', 'wu', 'zamora', 'macdonald', 'vance', 'snow', 'mcclain', 'stafford', 'orozco', 'barry', 'english', 'shannon', 'kline', 'jacobson', 'woodard', 'huang', 'kemp', 'mosley', 'prince', 'merritt', 'hurst', 'villanueva', 'roach', 'nolan', 'lam', 'yoder', 'mccullough', 'lester', 'santana', 'valenzuela', 'winters', 'barrera', 'orr', 'leach', 'berger', 'mckee', 'strong', 'conway', 'stein', 'whitehead', 'bullock', 'escobar', 'knox', 'meadows', 'solomon', 'velez', 'odonnell', 'kerr', 'stout', 'blankenship', 'browning', 'kent', 'lozano', 'bartlett', 'pruitt', 'buck', 'barr', 'gaines', 'durham', 'gentry', 'mcintyre', 'sloan', 'rocha', 'melendez', 'herman', 'sexton', 'moon', 'hendricks', 'rangel', 'stark', 'lowery', 'hardin', 'hull', 'sellers', 'ellison', 'calhoun', 'gillespie', 'mora', 'knapp', 'mccall', 'morse', 'dorsey', 'weeks', 'nielsen', 'livingston', 'leblanc', 'mclean', 'bradshaw', 'glass', 'middleton', 'buckley', 'schaefer', 'frost', 'howe', 'house', 'mcintosh', 'ho', 'pennington', 'reilly', 'hebert', 'mcfarland', 'hickman', 'noble', 'spears', 'conrad', 'arias', 'galvan', 'velazquez', 'huynh', 'frederick', 'randolph', 'cantu', 'fitzpatrick', 'mahoney', 'peck', 'villa', 'michael', 'donovan', 'mcconnell', 'walls', 'boyle', 'mayer', 'zuniga', 'giles', 'pineda', 'pace', 'hurley', 'mays', 'mcmillan', 'crosby', 'ayers', 'case', 'bentley', 'shepard', 'everett', 'pugh', 'david', 'mcmahon', 'dunlap', 'bender', 'hahn', 'harding', 'acevedo', 'raymond', 'blackburn', 'duffy', 'landry', 'dougherty', 'bautista', 'shah', 'potts', 'arroyo', 'valentine', 'meza', 'gould', 'vaughan', 'fry', 'rush', 'avery', 'herring', 'dodson', 'clements', 'sampson', 'tapia', 'bean', 'lynn', 'crane', 'farley', 'cisneros', 'benton', 'ashley', 'mckay', 'finley', 'best', 'blevins', 'friedman', 'moses', 'sosa', 'blanchard', 'huber', 'frye', 'krueger', 'bernard', 'rosario', 'rubio', 'mullen', 'benjamin', 'haley', 'chung', 'moyer', 'choi', 'horne', 'yu(s)(s)', 'woodward', 'ali', 'nixon', 'hayden', 'rivers', 'estes', 'mccarty', 'richmond', 'stuart', 'maynard', 'brandt', 'oconnell', 'hanna', 'sanford', 'sheppard', 'church', 'burch', 'levy', 'rasmussen', 'coffey', 'ponce', 'faulkner', 'donaldson', 'schmitt', 'novak', 'costa', 'montes', 'booker', 'cordova', 'waller', 'arellano', 'maddox', 'mata', 'bonilla', 'stanton', 'compton', 'kaufman', 'dudley', 'mcpherson', 'beltran', 'dickson', 'mccann', 'villegas', 'proctor', 'hester', 'cantrell', 'daugherty', 'cherry', 'bray', 'davila', 'rowland', 'madden', 'levine', 'spence', 'good', 'irwin', 'werner', 'krause', 'petty', 'whitney', 'baird', 'hooper', 'pollard', 'zavala', 'jarvis', 'holden', 'hendrix', 'haas', 'mcgrath', 'bird', 'lucero', 'terrell', 'riggs', 'joyce', 'rollins', 'mercer', 'galloway', 'duke', 'odom', 'andersen', 'downs', 'hatfield', 'benitez', 'archer', 'huerta', 'travis', 'mcneil', 'hinton', 'zhang', 'hays', 'mayo', 'fritz', 'branch', 'mooney', 'ewing', 'ritter', 'esparza', 'frey', 'braun', 'gay', 'riddle', 'haney', 'kaiser', 'holder', 'chaney', 'mcknight', 'gamble', 'vang', 'cooley', 'carney', 'cowan', 'forbes', 'ferrell', 'davies', 'barajas', 'shea', 'osborn', 'bright', 'cuevas', 'bolton', 'murillo', 'lutz', 'duarte', 'kidd', 'key', 'cooke'] 13 | def run(self): 14 | if self.style == 'Gmail': 15 | emaillist = self.dot_trick(self.email[:self.email.find('@')])[0:int(self.maxcount)] 16 | else: 17 | count = 0 18 | emaillist = [] 19 | while count < int(self.maxcount): 20 | emaillist.append(random.choice(self.firstnames) + random.choice(self.lastnames) + str(random.randint(0,9999)) + '@' + self.email) 21 | count += 1 22 | for item in emaillist: 23 | try: 24 | accounts = open('accounts.txt', 'a') 25 | except: 26 | accounts = open('accounts.txt', 'w') 27 | password = random.choice(self.firstnames) + random.choice(self.lastnames) + str(random.randint(0,9999)) 28 | if createaccount(random.choice(self.firstnames), random.choice(self.lastnames), item, password): 29 | print('Account Generated : ' + item + ':' + password) 30 | accounts.write(item + ':' + password + '\n') 31 | else: 32 | print('Failed to Create Account') 33 | accounts.close() 34 | print('Accounts Available in accounts.txt') 35 | 36 | def dot_trick(self, username): 37 | emails = list() 38 | username_length = len(username) 39 | combinations = pow(2, username_length - 1) 40 | padding = "{0:0" + str(username_length - 1) + "b}" 41 | for i in range(0, combinations): 42 | bin = padding.format(i) 43 | full_email = "" 44 | 45 | for j in range(0, username_length - 1): 46 | full_email += (username[j]); 47 | if bin[j] == "1": 48 | full_email += "." 49 | full_email += (username[j + 1]) 50 | emails.append(full_email + "@gmail.com") 51 | return emails 52 | 53 | class Ui_dialog(object): 54 | def setupUi(self, Dialog): 55 | Dialog.setObjectName("Dialog") 56 | Dialog.resize(361, 130) 57 | self.boxType = QtWidgets.QComboBox(Dialog) 58 | self.boxType.setGeometry(QtCore.QRect(220, 37, 121, 22)) 59 | font = QtGui.QFont() 60 | font.setFamily("YEEZY TSTAR") 61 | font.setPointSize(14) 62 | self.boxType.setFont(font) 63 | self.boxType.setObjectName("boxType") 64 | self.boxType.addItem("") 65 | self.boxType.addItem("") 66 | self.boxMaxAccounts = QtWidgets.QSpinBox(Dialog) 67 | self.boxMaxAccounts.setGeometry(QtCore.QRect(220, 67, 121, 23)) 68 | font = QtGui.QFont() 69 | font.setFamily("YEEZY TSTAR") 70 | font.setPointSize(14) 71 | self.boxMaxAccounts.setFont(font) 72 | self.boxMaxAccounts.setMaximum(999) 73 | self.boxMaxAccounts.setObjectName("boxMaxAccounts") 74 | self.txtEmail = QtWidgets.QLineEdit(Dialog) 75 | self.txtEmail.setGeometry(QtCore.QRect(20, 7, 321, 22)) 76 | font = QtGui.QFont() 77 | font.setFamily("YEEZY TSTAR") 78 | font.setPointSize(14) 79 | self.txtEmail.setFont(font) 80 | self.txtEmail.setObjectName("txtEmail") 81 | self.label = QtWidgets.QLabel(Dialog) 82 | self.label.setGeometry(QtCore.QRect(20, 70, 171, 16)) 83 | font = QtGui.QFont() 84 | font.setFamily("YEEZY TSTAR") 85 | font.setPointSize(14) 86 | self.label.setFont(font) 87 | self.label.setObjectName("label") 88 | self.btnCreate = QtWidgets.QPushButton(Dialog) 89 | self.btnCreate.setGeometry(QtCore.QRect(10, 97, 341, 22)) 90 | font = QtGui.QFont() 91 | font.setFamily("YEEZY TSTAR") 92 | font.setPointSize(14) 93 | self.btnCreate.setFont(font) 94 | self.btnCreate.setAutoDefault(False) 95 | self.btnCreate.setObjectName("btnCreate") 96 | self.label_2 = QtWidgets.QLabel(Dialog) 97 | self.label_2.setGeometry(QtCore.QRect(20, 40, 201, 16)) 98 | font = QtGui.QFont() 99 | font.setFamily("YEEZY TSTAR") 100 | font.setPointSize(14) 101 | self.label_2.setFont(font) 102 | self.label_2.setObjectName("label_2") 103 | 104 | self.retranslateUi(Dialog) 105 | QtCore.QMetaObject.connectSlotsByName(Dialog) 106 | 107 | def retranslateUi(self, Dialog): 108 | _translate = QtCore.QCoreApplication.translate 109 | Dialog.setWindowTitle(_translate("Dialog", "/// Account Creator")) 110 | self.boxType.setItemText(0, _translate("Dialog", "Gmail")) 111 | self.boxType.setItemText(1, _translate("Dialog", "Catch All")) 112 | self.txtEmail.setText(_translate("Dialog", "Gmail / Domain")) 113 | self.label.setText(_translate("Dialog", "Accounts To Create")) 114 | self.btnCreate.setText(_translate("Dialog", "Create Accounts")) 115 | self.label_2.setText(_translate("Dialog", "Email Creation Style")) 116 | self.btnCreate.clicked.connect(self.createAccounts) 117 | 118 | def createAccounts(self): 119 | self.thread = createAccounts(self.txtEmail.text(), self.boxType.currentText(), self.boxMaxAccounts.text()) 120 | self.thread.start() 121 | 122 | if __name__ == "__main__": 123 | import sys 124 | app = QtWidgets.QApplication(sys.argv) 125 | Dialog = QtWidgets.QDialog() 126 | ui = Ui_Dialog() 127 | ui.setupUi(Dialog) 128 | Dialog.show() 129 | sys.exit(app.exec_()) 130 | -------------------------------------------------------------------------------- /classes/adidas.py: -------------------------------------------------------------------------------- 1 | import requests, random, json, re, time 2 | import classes.fetchtoken as recaptchafetch 3 | from bs4 import BeautifulSoup as bs 4 | from selenium import webdriver 5 | from selenium.webdriver.chrome.options import Options 6 | 7 | class adidas: 8 | def __init__(self, region, proxy): 9 | if proxy == '': 10 | self.proxy = '' 11 | else: 12 | self.proxy = { 13 | 'http': proxy, 14 | 'https': proxy.replace('http://', 'https://') 15 | } 16 | self.directproxy = proxy[:proxy.find('://')+3] + proxy[proxy.find('@')+1:] 17 | self.s = requests.Session() 18 | self.s.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 19 | self.region = region.upper() 20 | if self.region == 'US': 21 | self.atcurl = 'http://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/Cart-MiniAddProduct' 22 | self.checkstockurl = 'https://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/Product-Show?pid=%08{}' 23 | self.loginurlbase = 'https://cp.adidas.com' 24 | self.loginurlgetdata = 'https://cp.adidas.com/web/eCom/en_US/loadsignin?target=account' 25 | self.loginurlpost = 'https://cp.adidas.com/idp/startSSO.ping' 26 | self.loginurlposttwo = 'https://cp.adidas.com/sp/ACS.saml2' 27 | self.loginurlcreatecookie = 'https://cp.adidas.com/web/ssoCookieCreate?resume={}&cd={}|{}|{}|null' 28 | self.loginurlmyaccount = 'https://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/MyAccount-ResumeLogin' 29 | self.myaccheaders = { 30 | 'Origin':self.loginurlbase, 31 | 'Referer':self.loginurlbase, 32 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 33 | } 34 | elif self.region == 'AU': 35 | self.atcurl = 'http://www.adidas.com.au/on/demandware.store/Sites-adidas-AU-Site/en_AU/Cart-MiniAddProduct' 36 | self.checkstockurl = 'https://www.adidas.com.au/on/demandware.store/Sites-adidas-AU-Site/en_AU/Product-Show?pid=%08{}' 37 | self.loginurlbase = 'https://cp.adidas.com.au' 38 | self.loginurlgetdata = 'https://cp.adidas.com.au/web/eCom/en_AU/loadsignin?target=account' 39 | self.loginurlpost = 'https://cp.adidas.com.au/idp/startSSO.ping' 40 | self.loginurlposttwo = 'https://cp.adidas.com.au/sp/ACS.saml2' 41 | self.loginurlcreatecookie = 'https://cp.adidas.com.au/web/ssoCookieCreate?resume={}&cd={}|{}|{}|null' 42 | self.loginurlmyaccount = 'https://www.adidas.com.au/on/demandware.store/Sites-adidas-AU-Site/en_AU/MyAccount-ResumeLogin' 43 | self.myaccheaders = { 44 | 'Origin':self.loginurlbase, 45 | 'Referer':self.loginurlbase, 46 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 47 | } 48 | elif self.region == 'GB': 49 | self.atcurl = 'http://www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB/Cart-MiniAddProduct' 50 | self.checkstockurl = 'https://www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB/Product-Show?pid=%08{}' 51 | self.loginurlbase = 'https://cp.adidas.co.uk' 52 | self.loginurlgetdata = 'https://cp.adidas.co.uk/web/eCom/en_GB/loadsignin?target=account' 53 | self.loginurlpost = 'https://cp.adidas.co.uk/idp/startSSO.ping' 54 | self.loginurlposttwo = 'https://cp.adidas.co.uk/sp/ACS.saml2' 55 | self.loginurlcreatecookie = 'https://cp.adidas.co.uk/web/ssoCookieCreate?resume={}&cd={}|{}|{}|null' 56 | self.loginurlmyaccount = 'https://www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB/MyAccount-ResumeLogin' 57 | self.myaccheaders = { 58 | 'Origin':self.loginurlbase, 59 | 'Referer':self.loginurlbase, 60 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 61 | } 62 | elif self.region == 'CA': 63 | self.atcurl = 'http://www.adidas.ca/on/demandware.store/Sites-adidas-CA-Site/en_CA/Cart-MiniAddProduct' 64 | self.checkstockurl = 'https://www.adidas.ca/on/demandware.store/Sites-adidas-CA-Site/en_CA/Product-Show?pid=%08{}' 65 | self.loginurlbase = 'https://cp.adidas.ca' 66 | self.loginurlgetdata = 'https://cp.adidas.ca/web/eCom/en_CA/loadsignin?target=account' 67 | self.loginurlpost = 'https://cp.adidas.ca/idp/startSSO.ping' 68 | self.loginurlposttwo = 'https://cp.adidas.ca/sp/ACS.saml2' 69 | self.loginurlcreatecookie = 'https://cp.adidas.ca/web/ssoCookieCreate?resume={}&cd={}|{}|{}|null' 70 | self.loginurlmyaccount = 'https://www.adidas.ca/on/demandware.store/Sites-adidas-CA-Site/en_CA/MyAccount-ResumeLogin' 71 | self.myaccheaders = { 72 | 'Origin':self.loginurlbase, 73 | 'Referer':self.loginurlbase, 74 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 75 | } 76 | def login(self, email, passw): 77 | try: 78 | res = self.s.get(self.loginurlgetdata, headers = self.myaccheaders, proxies = self.proxy) 79 | soup = bs(res.text, 'lxml') 80 | payload = { 81 | 'username': email, 82 | 'password': passw, 83 | 'signinSubmit': 'Sign in' 84 | } 85 | payload['IdpAdapterId'] = soup.find('input', {'name':'IdpAdapterId'})['value'] 86 | payload['SpSessionAuthnAdapterId'] = soup.find('input', {'name':'SpSessionAuthnAdapterId'})['value'] 87 | payload['PartnerSpId'] = soup.find('input', {'name':'PartnerSpId'})['value'] 88 | payload['remembermeParam'] = soup.find('input', {'name':'remembermeParam'})['value'] 89 | payload['validator_id'] = soup.find('input', {'name':'validator_id'})['value'] 90 | payload['TargetResource'] = soup.find('input', {'name':'TargetResource'})['value'] 91 | payload['InErrorResource'] = soup.find('input', {'name':'InErrorResource'})['value'] 92 | payload['loginUrl'] = soup.find('input', {'name':'loginUrl'})['value'] 93 | payload['cd'] = soup.find('input', {'name':'cd'})['value'] 94 | payload['app'] = soup.find('input', {'name':'app'})['value'] 95 | payload['locale'] = soup.find('input', {'name':'locale'})['value'] 96 | payload['domain'] = soup.find('input', {'name':'domain'})['value'] 97 | payload['email'] = soup.find('input', {'name':'email'})['value'] 98 | payload['pfRedirectBaseURL_test'] = soup.find('input', {'name':'pfRedirectBaseURL_test'})['value'] 99 | payload['pfStartSSOURL_test'] = soup.find('input', {'name':'pfStartSSOURL_test'})['value'] 100 | payload['resumeURL_test'] = soup.find('input', {'name':'resumeURL_test'})['value'] 101 | payload['FromFinishRegistraion'] = soup.find('input', {'name':'FromFinishRegistraion'})['value'] 102 | payload['CSRFToken'] = soup.find('input', {'name':'CSRFToken'})['value'] 103 | res = self.s.post(self.loginurlpost, data = payload, headers = self.myaccheaders, proxies = self.proxy) 104 | sub = res.text[res.text.find('/idp/')+5:] 105 | firststring = sub[:sub.find('/idp/')] 106 | secondstring = sub[sub.find('/idp/')+5:sub.find("'")] 107 | url = '/idp/' + firststring + '/idp/' + secondstring 108 | res = self.s.get(self.loginurlcreatecookie.format(url.replace(' ', '%7C'), payload['cd'].replace(' ', '%7C'), payload['locale'].replace(' ', '%7C'), payload['domain'].replace(' ', '%7C')), headers = self.myaccheaders, proxies = self.proxy) 109 | #soup = bs(res.text, 'lxml') 110 | #nexturl = soup.find('img')['src'] 111 | #self.s.get(nexturl) 112 | res = self.s.get(self.loginurlbase + url, headers = self.myaccheaders, proxies = self.proxy) 113 | soup = bs(res.text, 'lxml') 114 | payload = { 115 | 'RelayState':soup.find('input', {'name':'RelayState'})['value'], 116 | 'SAMLResponse':soup.find('input', {'name': 'SAMLResponse'})['value'] 117 | } 118 | res = self.s.post(self.loginurlposttwo, data = payload, headers = self.myaccheaders, proxies = self.proxy) 119 | soup = bs(res.text, 'lxml') 120 | payload = { 121 | 'REF':soup.find('input', {'name':'REF'})['value'], 122 | 'TargetResource':soup.find('input', {'name':'TargetResource'})['value'] 123 | } 124 | res = self.s.post(self.loginurlmyaccount, headers = self.myaccheaders, data = payload, proxies = self.proxy) 125 | return(True) 126 | except: 127 | return(False) 128 | 129 | 130 | def sizetocode(self, size): 131 | size = float(size) 132 | if size >= 4 and size <= 13: 133 | temp = 20 * (size - 4) + 530 134 | return(str(int(temp))) 135 | 136 | def setupatc(self, sku): 137 | if self.region == 'US': 138 | self.atcheaders = { 139 | 'Origin':'http://www.adidas.com', 140 | 'Referer':'http://www.adidas.com/us/' + sku + '.html', 141 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 142 | } 143 | elif self.region == 'AU': 144 | self.atcheaders = { 145 | 'Origin':'https://www.adidas.com.au', 146 | 'Referer':'http://www.adidas.com.au/' + sku + '.html', 147 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 148 | } 149 | elif self.region == 'GB': 150 | self.atcheaders = { 151 | 'Origin':'https://www.adidas.co.uk', 152 | 'Referer':'https://www.adidas.co.uk/' + sku + '.html', 153 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 154 | } 155 | elif self.region == 'CA': 156 | self.atcheaders = { 157 | 'Origin':'https://www.adidas.ca', 158 | 'Referer':'http://www.adidas.ca/en/' + sku + '.html', 159 | 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' 160 | } 161 | 162 | def atcupdated(self, sku, size, method): 163 | if type(size) is not str: 164 | size = random.choice(size) 165 | sc = self.sizetocode(size) 166 | if method == 'captcha': 167 | payload = { 168 | 'clientCaptchaResponse' : recaptchafetch.main(), 169 | 'invalidFields' : '[]', 170 | 'isValidating' : 'false', 171 | 'product_id' : sku.upper(), 172 | 'product_variation_sku' : sku.upper() + '_' + sc, 173 | 'quantity' : '1', 174 | 'recipe' : '', 175 | 'size' : size 176 | } 177 | 178 | elif method == 'basic': 179 | payload = { 180 | 'clientCaptchaResponse' : '', 181 | 'invalidFields' : '[]', 182 | 'isValidating' : 'false', 183 | 'product_id' : sku.upper(), 184 | 'product_variation_sku' : sku.upper() + '_' + sc, 185 | 'quantity' : '1', 186 | 'recipe' : '', 187 | 'size' : size 188 | } 189 | 190 | 191 | if self.region == 'US': 192 | posturl = 'https://www.adidas.com/api/cart_items?sitePath=us' 193 | elif self.region == 'AU': 194 | posturl = 'https://www.adidas.com.au/api/cart_items' 195 | elif self.region == 'CA': 196 | posturl = 'https://www.adidas.ca/api/cart_items?sitePath=en' 197 | elif self.region == 'GB': 198 | posturl = 'https://www.adidas.co.uk/api/cart_items' 199 | 200 | if self.proxy == '': 201 | res = self.s.post(posturl, headers = self.atcheaders, data = payload) 202 | else: 203 | res = self.s.post(posturl, headers = self.atcheaders, data = payload, proxies = self.proxy) 204 | 205 | print(res.text) 206 | 207 | if 'error' in res.text.lower() or 'failed' in res.text.lower() or 'out-of-stock' in res.text.lower() or 'invalid-captcha' in res.text.lower(): 208 | return(False) 209 | else: 210 | return(True) 211 | 212 | def checkstock(self, sku, size): 213 | res = self.s.get(self.checkstockurl.format(sku.upper())) 214 | if 'UNFORTUNATELY WE ARE UNABLE TO GIVE YOU ACCESS TO OUR SITE AT THIS TIME' in res.text.upper(): 215 | print('Banned Waiting 60') 216 | time.sleep(60) 217 | return(False) 218 | soup = bs(res.text, 'lxml') 219 | button = soup.find('button', {'name':'add-to-cart-button'}) 220 | sizelist = [] 221 | try: 222 | if '' in button.text: 223 | pass 224 | except: 225 | return(False) 226 | container = soup.find('select', {'name':'pid'}) 227 | for item in container.find_all('ispagecontextset'): 228 | if '.' not in item['value']: 229 | sizelist.append(item['value'] + '.0') 230 | else: 231 | sizelist.append(item['value']) 232 | if size in sizelist: 233 | return(True) 234 | else: 235 | return(False) 236 | 237 | def atcbasic(self, sku, size): 238 | if type(size) is not str: 239 | size = random.choice(size) 240 | sc = self.sizetocode(size) 241 | payload = { 242 | 'layer':'Add To Bag overlay', 243 | 'pid':sku.upper()+'_'+sc, 244 | 'Quantity':'1', 245 | 'masterPid':sku.upper(), 246 | 'sessionSelectedStoreID':'null', 247 | 'ajax':'true', 248 | 'responseformat':'json' 249 | } 250 | res = self.s.post(self.atcurl, headers = self.atcheaders, data = payload) 251 | try: 252 | if res.json()['result'].lower() == 'success': 253 | return(True) 254 | else: 255 | return(False) 256 | except: 257 | if res.json()['success'].lower() == 'true': 258 | return(True) 259 | else: 260 | return(False) 261 | 262 | def atcwrecaptcha(self, sku, size): 263 | if type(size) is not str: 264 | size = random.choice(size) 265 | sc = self.sizetocode(size) 266 | payload = { 267 | 'layer':'Add To Bag overlay', 268 | 'pid':sku.upper()+'_'+sc, 269 | 'Quantity':'1', 270 | 'g-recaptcha-response':recaptchafetch.main(), 271 | 'masterPid':sku.upper(), 272 | 'sessionSelectedStoreID':'null', 273 | 'ajax':'true', 274 | 'responseformat':'json' 275 | } 276 | res = self.s.post(self.atcurl, headers = self.atcheaders, data = payload) 277 | print(str(res.text)) 278 | try: 279 | if res.json()['result'].lower() == 'success': 280 | return(True) 281 | else: 282 | return(False) 283 | except: 284 | if res.json()['success'].lower() == 'true': 285 | return(True) 286 | else: 287 | return(False) 288 | 289 | def atcdupcap(self, dupcap, clientid, sku, size): 290 | if type(size) is not str: 291 | size = random.choice(size) 292 | sc = self.sizetocode(size) 293 | recaptoken = recaptchafetch.main() 294 | payload = { 295 | 'clientId':clientid, 296 | dupcap:recaptoken, 297 | 'pid':sku.upper()+'_'+sc, 298 | 'Quantity':'1', 299 | 'g-recaptcha-response':recaptoken, 300 | 'sessionSelectedStoreID':'null', 301 | 'ajax':'true', 302 | 'responseformat':'json' 303 | } 304 | res = self.s.post(self.atcurl, headers = self.atcheaders, data = payload) 305 | try: 306 | if res.json()['result'].lower() == 'success': 307 | return(True) 308 | else: 309 | return(False) 310 | except: 311 | if res.json()['success'].lower() == 'true': 312 | return(True) 313 | else: 314 | return(False) 315 | 316 | def opencart(self): 317 | chrome_options = Options() 318 | if self.region == 'US': 319 | self.chrome = webdriver.Chrome(chrome_options=chrome_options) 320 | self.chrome.get('https://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/Cart-Show') 321 | for c in self.s.cookies: 322 | self.chrome.add_cookie({'name': c.name, 'value': c.value, 'path': c.path, 'expiry': c.expires}) 323 | elif self.region == 'AU': 324 | self.chrome = webdriver.Chrome(chrome_options=chrome_options) 325 | self.chrome.get('https://www.adidas.com.au/on/demandware.store/Sites-adidas-AU-Site/en_AU/Cart-Show') 326 | for c in self.s.cookies: 327 | self.chrome.add_cookie({'name': c.name, 'value': c.value, 'path': c.path, 'expiry': c.expires}) 328 | elif self.region == 'GB': 329 | self.chrome = webdriver.Chrome(chrome_options=chrome_options) 330 | self.chrome.get('https://www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB/Cart-Show') 331 | for c in self.s.cookies: 332 | self.chrome.add_cookie({'name': c.name, 'value': c.value, 'path': c.path, 'expiry': c.expires}) 333 | elif self.region == 'CA': 334 | self.chrome = webdriver.Chrome(chrome_options=chrome_options) 335 | self.chrome.get('https://www.adidas.ca/on/demandware.store/Sites-adidas-CA-Site/en_CA/Cart-Show') 336 | for c in self.s.cookies: 337 | self.chrome.add_cookie({'name': c.name, 'value': c.value, 'path': c.path, 'expiry': c.expires}) 338 | --------------------------------------------------------------------------------