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