├── setup.bat
├── License
├── README.md
└── main.py
/setup.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | color 0A
3 | cls
4 | echo Downloading Modules...
5 | python -m pip install colorama
6 | python -m pip install selenium
7 | python -m pip install time
8 | python -m pip install os
9 | echo Done
10 | pause
--------------------------------------------------------------------------------
/License:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 stan_711
4 |
5 | Permission is hereby granted to use this tool if our tool name is out of reach in this Contribution of our Repostirory we
6 | will be able to confront any problems in our server if modified and replaced name with someone else you will be
7 | charged or sued for these actions. This is our tool do not change the name of it you can add extra code but the rest
8 | is ours. Be careful with this tool it is against TOS of TIKTOK!
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software/Tool.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. WE DONT HOLD COUNTABILITY OF OTHERS PROBLEMS
16 | IF YOU DO JOIN OUR SERVER IN README.txt FILE FOR MORE INFORMATION OR REASON.
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Zefoy TikTok Automator | Vex Services
2 |
3 | **PATCHED** WE ARE WORKING ON A FIX AND UPDATE TO MAKE IT WORK AND MAKE IT BETTER, THANK YOU!
4 | *FOR MORE INFORMATION PLEASE JOIN:* `https://discord.gg/9G3m78jZSY`
5 |
6 | `REQUIREMENTS:`
7 | - python ( 3.9 or latest version: `https://www.python.org/downloads/` )
8 | - chromedriver.exe ( current version as chrome )
9 | - visual studio code
10 |
11 | `INSTRUCTIONS:`
12 | - download requirements
13 | - start setup.bat file
14 | - in *main.py* file, put the file location for the chromewebdriver.exe with double back slash: *//* ( PATH LOCATED ON LINE #125 ) should say "//chromedriver.exe"
15 | - run main.py botter and then type the tiktok video URL and solve the captcha on Zefoy and then type "y", the bot will check captcha then it'll start.
16 | *NOTE: IF IT SAYS CAPTCHA NOT SOLVED WHEN YOU TYPE Y DO IT AGAIN ( & it should work ). *
17 |
18 | `INCLUDES:`
19 | - Followers
20 | - Shares
21 | - Hearts
22 | - Views
23 | - Option: All ( selects all options, merges )
24 |
25 | 
26 |
27 | `COMMON ERRORS:`
28 | - "Checking if the site connection is secure"
29 | | *To prevent this error make sure your VPN or Proxy is turned off. Also make sure to have a secure network.*
30 | - "[>] You Didn't Finish The Captcha.
31 | [>>>] Type "y" Once You Finished The Captcha: y
32 | | *WORKING ON FIX*
33 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | import time
2 | from colorama import Fore, init
3 | from selenium import webdriver
4 | from selenium.webdriver.chrome.service import Service
5 | from selenium.webdriver.common.by import By
6 | from os import system, get_terminal_size
7 |
8 | init()
9 | system("mode 800")
10 | system("title Zefoy TikTok Automator | Vex Services")
11 |
12 | def color(str, color):
13 | if color.lower() == "green":
14 | result = f"{Fore.WHITE}[{Fore.LIGHTGREEN_EX}{str}{Fore.WHITE}]{Fore.LIGHTGREEN_EX}"
15 |
16 | elif color.lower() == "red":
17 | result = f"{Fore.WHITE}[{Fore.LIGHTRED_EX}{str}{Fore.WHITE}]{Fore.LIGHTRED_EX}"
18 |
19 | return result
20 |
21 | def align(str):
22 | lines = str.splitlines( )
23 | greatest = []
24 | for i in lines:
25 | greatest.append(len(i))
26 |
27 | for i in lines:
28 | length = round(int(greatest[-1])/2)
29 | print(f"{' '*round(get_terminal_size().columns/2-length)}{i}")
30 |
31 |
32 | class printing():
33 |
34 | def __init__(self, a, b, c, d):
35 | self.a = a
36 | self.b = b
37 | self.c = c
38 | self.d = d
39 |
40 | def text():
41 | text = f"""{Fore.LIGHTBLUE_EX}
42 |
43 | ██╗░░░██╗███████╗██╗░░██╗
44 | ██║░░░██║██╔════╝╚██╗██╔╝
45 | ╚██╗░██╔╝█████╗░░░╚███╔╝░
46 | ░╚████╔╝░██╔══╝░░░██╔██╗░
47 | ░░╚██╔╝░░███████╗██╔╝╚██╗
48 | ░░░╚═╝░░░╚══════╝╚═╝░░╚═╝
49 | .gg/9G3m78jZSY
50 |
51 | """
52 | text = text.replace('▪', f'{Fore.GREEN}▪{Fore.LIGHTBLUE_EX}')
53 | text = text.replace('•', f'{Fore.GREEN}•{Fore.LIGHTBLUE_EX}')
54 | text = text.replace('·', f'{Fore.GREEN}·{Fore.LIGHTBLUE_EX}')
55 | text = text.replace('.', f'{Fore.GREEN}.{Fore.LIGHTBLUE_EX}')
56 | align(text)
57 |
58 | def info():
59 | align(f"""{Fore.WHITE}
60 | ╔═════════════════════════════════════════╗
61 | ║ ║
62 | ║ {color(">", "green")} Developer: {Fore.LIGHTBLUE_EX}stan#0633{Fore.WHITE}
63 | ║ {color(">", "green")} Discord: {Fore.LIGHTBLUE_EX}https://discord.gg/9G3m78jZSY{Fore.WHITE}
64 | ║ {color(">", "green")} Github: {Fore.LIGHTBLUE_EX}https://github.com/vex-ss{Fore.WHITE}
65 | ║ ║
66 | ╚═════════════════════════════════════════╝
67 | """)
68 |
69 | def options():
70 | align(f"""{Fore.WHITE}
71 | ╔═══════════════════════════════╗
72 | ║ ║
73 | ║ {color("1", "green")} {Fore.LIGHTBLUE_EX}Start{Fore.WHITE} ║
74 | ║ {color("2", "green")} {Fore.LIGHTBLUE_EX}Info{Fore.WHITE} ║
75 | ║ {color("3", "green")} {Fore.LIGHTBLUE_EX}Options{Fore.WHITE} ║
76 | ║ {color("4", "green")} {Fore.LIGHTBLUE_EX}Clear{Fore.WHITE} ║
77 | ║ {color("5", "green")} {Fore.LIGHTBLUE_EX}Exit{Fore.WHITE} ║
78 | ║ ║
79 | ╚═══════════════════════════════╝
80 | """)
81 |
82 | def botOptions():
83 | align(f"""{Fore.WHITE}
84 | ╔═══════════════════════════════╗
85 | ║ ║
86 | ║ {color("1", "green")} {Fore.LIGHTBLUE_EX}Follows{Fore.WHITE} ║
87 | ║ {color("2", "green")} {Fore.LIGHTBLUE_EX}Hearts{Fore.WHITE} ║
88 | ║ {color("3", "green")} {Fore.LIGHTBLUE_EX}Views{Fore.WHITE} ║
89 | ║ {color("4", "green")} {Fore.LIGHTBLUE_EX}Shares{Fore.WHITE} ║
90 | ║ {color("5", "green")} {Fore.LIGHTBLUE_EX}All{Fore.WHITE} ║
91 | ║ ║
92 | ╚═══════════════════════════════╝
93 | """)
94 |
95 | def cooldowns(self):
96 | align(f"""{Fore.WHITE}
97 | ╔═══════════════════════════════╗
98 | ║ {color(">", "green")} {Fore.LIGHTBLUE_EX}Cool Downs {color("<", "green")}║
99 | ║ {color(">", "green")} {Fore.LIGHTBLUE_EX}Follows: {Fore.LIGHTCYAN_EX}{self.a}s{Fore.WHITE} ║
100 | ║ {color(">", "green")} {Fore.LIGHTBLUE_EX}Hearts: {Fore.LIGHTCYAN_EX}{self.b}s{Fore.WHITE} ║
101 | ║ {color(">", "green")} {Fore.LIGHTBLUE_EX}Views: {Fore.LIGHTCYAN_EX}{self.c}s{Fore.WHITE} ║
102 | ║ {color(">", "green")} {Fore.LIGHTBLUE_EX}Shares: {Fore.LIGHTCYAN_EX}{self.d}s{Fore.WHITE} ║
103 | ║ ║
104 | ╚═══════════════════════════════╝
105 | """)
106 |
107 | def refresh():
108 | system("cls")
109 | printing.text()
110 | align(f"\n\n\t\t\t{color('>', 'green')}Developer: {Fore.LIGHTBLUE_EX}stan#0633{color('<', 'green')}")
111 | align(f"\t\t\t\t{color('>', 'green')}{Fore.LIGHTGREEN_EX}Github: {Fore.LIGHTBLUE_EX}https://github.com/vex-ss{color('<', 'green')}")
112 | printing.options()
113 |
114 | ## iliya was here < :)
115 |
116 | option = webdriver.ChromeOptions()
117 | option.add_experimental_option('excludeSwitches', ['enable-logging'])
118 | service = Service('C:\\Users\\Stan\\Downloads\\zefoy-tiktok-automator-main\\chromedriver.exe')
119 | driver = webdriver.Chrome(options=option)
120 |
121 | def start(video, botChoice):
122 |
123 |
124 | driver.get("https://zefoy.com")
125 |
126 | if driver.title == "zefoy.com | 502: Bad gateway":
127 | print(f"{color('>', 'red')} Zefoy Is Down... Attempting To Fix.\n")
128 | while driver.title == "zefoy.com | 502: Bad gateway":
129 | time.sleep(20)
130 | driver.refresh()
131 | if driver.title != "zefoy.com | 502: Bad gateway":
132 | print(f"\n{color('>', 'red')} Fixed! Zefoy is Back Up. Starting Now.\n")
133 | break
134 | else:
135 | print(f"\n{color('>', 'green')} Zefoy Is Up!\n")
136 |
137 | captchaCheck = input(f"{color('>>>', 'green')} Type \"y\" Once You Finished The Captcha: {Fore.LIGHTBLUE_EX}")
138 | captchaFinish = False
139 |
140 | if captchaCheck == "y":
141 | while captchaFinish != True:
142 | try:
143 | driver.find_element(By.XPATH, "/html/body/div[4]/div[1]/div[3]/div/div[1]/div/h5")
144 | captchaFinish = True
145 | except:
146 | print(f"\n{color('>', 'red')} You Didn't Finish The Captcha.")
147 | input(f"{color('>>>', 'green')} Type \"y\" Once You Finished The Captcha: {Fore.LIGHTBLUE_EX}")
148 |
149 | # Defining Find Cooldown
150 | def findCooldown(xpath):
151 | cooldown = driver.find_element(By.XPATH, xpath).text
152 |
153 | # String Slicing For Minutes
154 | minute1 = cooldown.find("wait") + 4
155 | minute2 = minute1
156 | while True:
157 | minute2 += 1
158 | if cooldown[minute2] == "m":
159 | break
160 |
161 | # String Slicing For Seconds
162 | second1 = cooldown.find(")") + 1
163 | second2 = second1
164 | while True:
165 | second2 += 1
166 | if cooldown[second2] == "s":
167 | break
168 |
169 | # Returning Minutes & Second Added
170 | return (int(cooldown[minute1:minute2])*60) + int(cooldown[second1:second2])
171 |
172 | print(f"\n{color('>', 'green')} Captcha is Finished, Starting...\n")
173 |
174 | # Defining Xpaths
175 | home = "/html/body/nav/ul/li/a"
176 |
177 | views_enter = "/html/body/div[4]/div[1]/div[3]/div/div[4]/div/button"
178 | views_input = "/html/body/div[4]/div[5]/div/form/div/input"
179 | views_search = "/html/body/div[4]/div[5]/div/form/div/div/button"
180 | views_submit = "/html/body/div[4]/div[5]/div/div/div[1]/div/form/button"
181 | views_cooldowns = "/html/body/div[4]/div[5]/div/div/h4"
182 |
183 | shares_enter = "/html/body/div[4]/div[1]/div[3]/div/div[5]/div/button"
184 | shares_input = "/html/body/div[4]/div[6]/div/form/div/input"
185 | shares_search = "/html/body/div[4]/div[6]/div/form/div/div/button"
186 | shares_submit = "/html/body/div[4]/div[6]/div/div/div[1]/div/form/button"
187 | shares_cooldowns = "/html/body/div[4]/div[6]/div/div/h4"
188 |
189 | hearts_enter = "/html/body/div[4]/div[1]/div[3]/div/div[2]/div/button"
190 | hearts_input = "/html/body/div[4]/div[3]/div/form/div/input"
191 | hearts_search = "/html/body/div[4]/div[3]/div/form/div/div/button"
192 | hearts_submit = "/html/body/div[4]/div[3]/div/div/div[1]/div/form/button"
193 | hearts_cooldowns = "/html/body/div[4]/div[3]/div/div/h4"
194 |
195 | follows_enter = "/html/body/div[4]/div[1]/div[3]/div/div[1]/div/button"
196 | follows_input = "/html/body/div[4]/div[2]/div/form/div/input"
197 | follows_search = "/html/body/div[4]/div[2]/div/form/div/div/button"
198 | follows_submit = "/html/body/div[4]/div[2]/div/div/div[1]/div/form/button"
199 | follows_cooldowns = "/html/body/div[4]/div[2]/div/div/h4"
200 |
201 | # List of Xpaths for the Bot All
202 | enterList = [
203 | [follows_enter, follows_input, follows_search, follows_submit, follows_cooldowns, "Follows"],
204 | [views_enter, views_input, views_search, views_submit, views_cooldowns, "Views"],
205 | [hearts_enter, hearts_input, hearts_search, hearts_submit, hearts_cooldowns, "Hearts"],
206 | [shares_enter, shares_input, shares_search, shares_submit, shares_cooldowns, "Shares"],
207 | ]
208 |
209 | # Defining Cool-downs
210 | follows_cooldown = 0
211 | hearts_cooldown = 0
212 | views_cooldown = 0
213 | shares_cooldown = 0
214 |
215 | # Defining Boolean
216 | continue1 = False
217 | continue2 = False
218 |
219 | time.sleep(5)
220 |
221 | # Defining Botting Function, Uses XPaths as parameters
222 | def bot(which, enter, input, search, submit, con1, con2, cooldownText, cooldownTime):
223 | amount = 0
224 | while captchaFinish:
225 | driver.refresh()
226 |
227 | #Checks If Zefoy Down
228 | if driver.title == "zefoy.com | 502: Bad gateway":
229 | print(f"{color('>', 'red')} Zefoy Is Down... Attempting To Fix.\n")
230 | while driver.title == "zefoy.com | 502: Bad gateway":
231 | time.sleep(20)
232 | driver.refresh()
233 | if driver.title != "zefoy.com | 502: Bad gateway":
234 | print(f"\n{color('>', 'red')} Fixed! Zefoy is Back Up. Starting Now.\n")
235 | break
236 |
237 | print(f"{color('>', 'green')} Sending {which}...")
238 | try:
239 | driver.find_element(By.XPATH, enter).click()
240 | time.sleep(1)
241 | driver.find_element(By.XPATH, input).send_keys(video)
242 | con1 = True
243 | except:
244 | con1 = False
245 | print(f"\n{color('>', 'red')} {which} Page is Down on Zefoy.")
246 | print(f"{color('>', 'red')} Stopped.")
247 | time.sleep(1000000)
248 | if con1 == True:
249 | time.sleep(2)
250 | driver.find_element(By.XPATH, search).click()
251 | time.sleep(3)
252 | try:
253 | driver.find_element(By.XPATH, submit).click()
254 | con2 = True
255 | print(f"{color('>', 'green')} Sent {which}, Getting Cool Down\n")
256 | except:
257 | con2 = False
258 | print(f"{color('>', 'red')} {which} Cool Down Isn't Finished, Getting Cool Down.\n")
259 | time.sleep(5)
260 | cooldownTime += findCooldown(cooldownText)
261 | if con2 == True:
262 | time.sleep(5)
263 | cooldownTime += findCooldown(cooldownText)
264 | else:
265 | pass
266 | else:
267 | pass
268 |
269 | amount += 1
270 | driver.find_element(By.XPATH, home).click()
271 | print(f"{color('>', 'green')} Completed {Fore.LIGHTCYAN_EX}{amount} {Fore.LIGHTGREEN_EX}Time.")
272 | print(f"{color('>', 'green')} Cooldown: {Fore.LIGHTCYAN_EX}{cooldownTime}s\n")
273 | for i in range(10):
274 | time.sleep(cooldownTime/10)
275 | driver.refresh()
276 | print(f"{color('>', 'green')} Cool-Down: {Fore.LIGHTCYAN_EX}{i+1}/10")
277 |
278 | print(f"\n{color('>', 'green')} Finished Cool Down, Restarting...\n")
279 | time.sleep(5)
280 |
281 | def botAll(boolean):
282 | amount = 0
283 | while True:
284 |
285 | #Checks If Zefoy Down
286 | if driver.title == "zefoy.com | 502: Bad gateway":
287 | print(f"{color('>', 'red')} Zefoy Is Down... Attempting To Fix.\n")
288 | while driver.title == "zefoy.com | 502: Bad gateway":
289 | time.sleep(20)
290 | driver.refresh()
291 | if driver.title != "zefoy.com | 502: Bad gateway":
292 | print(f"\n{color('>', 'red')} Fixed! Zefoy is Back Up. Starting Now.\n")
293 | break
294 |
295 | driver.refresh()
296 | cooldownList = []
297 | if boolean:
298 | for i in enterList:
299 | time.sleep(3)
300 | print(f"{color('>', 'green')} Sending {i[5]}...")
301 | try:
302 | driver.find_element(By.XPATH, i[0]).click()
303 | time.sleep(1)
304 | driver.find_element(By.XPATH, i[1]).send_keys(video)
305 | continue1 = True
306 | except:
307 | print(f"{color('>', 'red')} {i[5]} Page is Down on Zefoy.\n")
308 | cooldownList.append(0)
309 | continue1 = False
310 | driver.find_element(By.XPATH, home)
311 |
312 | if continue1 == True:
313 | time.sleep(2)
314 | driver.find_element(By.XPATH, i[2]).click()
315 | time.sleep(3)
316 |
317 | try:
318 | driver.find_element(By.XPATH, i[3]).click()
319 | continue2 = True
320 | print(f"{color('>', 'green')} Sent {i[5]}, Getting Cool Down.\n")
321 | except:
322 | print(f"{color('>', 'red')} {i[5]} Cool Down Isn't Finished, Getting Cool Down.\n")
323 | time.sleep(5)
324 | cooldownList.append(findCooldown(i[4]))
325 | driver.find_element(By.XPATH, home).click()
326 | continue2 = False
327 |
328 | if continue2 == True:
329 | time.sleep(5)
330 | cooldownList.append(findCooldown(i[4]))
331 | driver.refresh()
332 | else:
333 | pass
334 | else:
335 | pass
336 |
337 | amount +=1
338 | cooldownList.sort()
339 |
340 |
341 | print(f"{color('>', 'green')} Completed {amount} Time.")
342 | print(f"{color('>', 'green')} Cooldown: {Fore.LIGHTCYAN_EX}{cooldownList[-1]}s\n")
343 |
344 | for i in range(10):
345 | time.sleep(cooldownList[-1]/10)
346 | driver.refresh()
347 | print(f"{color('>', 'green')} Cool-Down: {Fore.LIGHTCYAN_EX}{i+1}/10")
348 |
349 | time.sleep(5)
350 | print(f"\n{color('>', 'green')} Finished Cool Down, Restarting...\n")
351 | driver.refresh()
352 |
353 | if botChoice == 1:
354 | bot("Follows", follows_enter, follows_input, follows_search, follows_submit, continue1, continue2, follows_cooldowns, follows_cooldown)
355 | elif botChoice == 2:
356 | bot("Hearts", hearts_enter, hearts_input, hearts_search, hearts_submit, continue1, continue2, hearts_cooldowns, hearts_cooldown)
357 | elif botChoice == 3:
358 | bot("Views", views_enter, views_input, views_search, views_submit, continue1, continue2, views_cooldowns, views_cooldown)
359 | elif botChoice == 4:
360 | bot("Shares", shares_enter, shares_input, shares_search, shares_submit, continue1, continue2, shares_cooldowns, shares_cooldown)
361 | elif botChoice == 5:
362 | botAll(True)
363 |
364 | printing.refresh()
365 |
366 | while True:
367 | choice = input(f"{color('>>>', 'green')} Choice: {Fore.LIGHTBLUE_EX}")
368 | if choice == "1":
369 | video = input(f"{color('>>>', 'green')} TikTok Video URL: {Fore.LIGHTBLUE_EX}")
370 | printing.botOptions()
371 | option = input(f"\n{color('>>>', 'green')} Which to Bot: {Fore.LIGHTBLUE_EX}")
372 | start(video, int(option))
373 | break
374 |
375 | elif choice == "2":
376 | printing.info()
377 | elif choice == "3":
378 | printing.options()
379 | elif choice == "4":
380 | printing.refresh()
381 | elif choice =="5":
382 | exit()
383 |
--------------------------------------------------------------------------------