tiktokautouploader 3.14__py2.py3-none-any.whl → 3.18__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tiktokautouploader/function.py +191 -115
- {tiktokautouploader-3.14.dist-info → tiktokautouploader-3.18.dist-info}/METADATA +11 -4
- tiktokautouploader-3.18.dist-info/RECORD +7 -0
- tiktokautouploader-3.14.dist-info/RECORD +0 -7
- {tiktokautouploader-3.14.dist-info → tiktokautouploader-3.18.dist-info}/WHEEL +0 -0
- {tiktokautouploader-3.14.dist-info → tiktokautouploader-3.18.dist-info}/licenses/LICENSE.md +0 -0
tiktokautouploader/function.py
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
from playwright.sync_api import sync_playwright
|
2
2
|
import json
|
3
3
|
import time
|
4
|
-
import inference
|
5
4
|
import subprocess
|
5
|
+
from inference_sdk import InferenceHTTPClient
|
6
6
|
import pkg_resources
|
7
7
|
import requests
|
8
8
|
from PIL import Image
|
9
9
|
import sys
|
10
|
-
import base64
|
11
10
|
import os
|
12
|
-
from dotenv import load_dotenv
|
13
11
|
import warnings
|
14
|
-
load_dotenv()
|
15
12
|
warnings.simplefilter("ignore")
|
16
13
|
|
17
14
|
|
@@ -135,8 +132,6 @@ def get_image_src(page):
|
|
135
132
|
image_url = page.get_attribute("img#captcha-verify-image", "src")
|
136
133
|
return image_url
|
137
134
|
|
138
|
-
os.getenv('ROBOFLOW_API_KEY')
|
139
|
-
|
140
135
|
def download_image(image_url):
|
141
136
|
response = requests.get(image_url)
|
142
137
|
image_path = "captcha_image.jpg"
|
@@ -146,18 +141,25 @@ def download_image(image_url):
|
|
146
141
|
|
147
142
|
def run_inference_on_image_tougher(image_path, object):
|
148
143
|
|
149
|
-
|
150
|
-
|
144
|
+
k = 'n|KIeDZnRZiJ};iVHz;R'
|
145
|
+
rk = ''.join(chr((ord(c) - 3) % 256) for c in k)
|
146
|
+
|
147
|
+
CLIENT = InferenceHTTPClient(
|
148
|
+
api_url="https://detect.roboflow.com",
|
149
|
+
api_key=f"{rk}"
|
150
|
+
)
|
151
|
+
|
152
|
+
results = CLIENT.infer(image_path, model_id="captcha-2-6ehbe/2")
|
151
153
|
|
152
154
|
class_names = []
|
153
155
|
bounding_boxes = []
|
154
|
-
for obj in results[
|
155
|
-
class_names.append(obj
|
156
|
+
for obj in results['predictions']:
|
157
|
+
class_names.append(obj['class'])
|
156
158
|
bounding_boxes.append({
|
157
|
-
"x": obj
|
158
|
-
"y": obj
|
159
|
-
"width": obj
|
160
|
-
"height": obj
|
159
|
+
"x": obj['x'],
|
160
|
+
"y": obj['y'],
|
161
|
+
"width": obj['width'],
|
162
|
+
"height": obj['height']
|
161
163
|
})
|
162
164
|
|
163
165
|
bounding_box = []
|
@@ -172,34 +174,40 @@ def run_inference_on_image_tougher(image_path, object):
|
|
172
174
|
|
173
175
|
def run_inference_on_image(image_path):
|
174
176
|
|
175
|
-
|
176
|
-
|
177
|
+
k = 'n|KIeDZnRZiJ};iVHz;R'
|
178
|
+
rk = ''.join(chr((ord(c) - 3) % 256) for c in k)
|
179
|
+
|
180
|
+
CLIENT = InferenceHTTPClient(
|
181
|
+
api_url="https://detect.roboflow.com",
|
182
|
+
api_key=f"{rk}"
|
183
|
+
)
|
184
|
+
|
185
|
+
results = CLIENT.infer(image_path, model_id="tk-3nwi9/2")
|
177
186
|
|
178
187
|
class_names = []
|
179
188
|
bounding_boxes = []
|
180
|
-
for obj in results[
|
181
|
-
class_names.append(obj
|
189
|
+
for obj in results['predictions']:
|
190
|
+
class_names.append(obj['class'])
|
182
191
|
bounding_boxes.append({
|
183
|
-
"x": obj
|
184
|
-
"y": obj
|
185
|
-
"width": obj
|
186
|
-
"height": obj
|
192
|
+
"x": obj['x'],
|
193
|
+
"y": obj['y'],
|
194
|
+
"width": obj['width'],
|
195
|
+
"height": obj['height']
|
187
196
|
})
|
188
197
|
|
189
198
|
already_written = []
|
190
199
|
bounding_box = []
|
191
200
|
class_to_click = []
|
192
|
-
for i,
|
193
|
-
if
|
194
|
-
class_to_click.append(
|
201
|
+
for i, detected_class in enumerate(class_names):
|
202
|
+
if detected_class in already_written:
|
203
|
+
class_to_click.append(detected_class)
|
195
204
|
bounding_box.append(bounding_boxes[i])
|
196
|
-
index = already_written.index(
|
205
|
+
index = already_written.index(detected_class)
|
197
206
|
bounding_box.append(bounding_boxes[index])
|
198
207
|
|
199
|
-
already_written.append(
|
208
|
+
already_written.append(detected_class)
|
200
209
|
|
201
210
|
found = False
|
202
|
-
|
203
211
|
if len(class_to_click) == 1:
|
204
212
|
found = True
|
205
213
|
|
@@ -234,6 +242,7 @@ def upload_tiktok(video, description, accountname, hashtags=None, sound_name=Non
|
|
234
242
|
------------------------------------------------------------------------------------------------------------------------------------------------c
|
235
243
|
video (str) -> path to video to upload
|
236
244
|
description (str) -> description for video
|
245
|
+
accountname (str) -> account to upload on
|
237
246
|
hashtags (str)(array) -> hashtags for video
|
238
247
|
sound_name (str) -> name of tik tok sound to use for video
|
239
248
|
sound_aud_vol (str) -> volume of tik tok sound, 'main', 'mix' or 'background', check documentation for more info -> https://github.com/haziq-exe/TikTokAutoUploader
|
@@ -463,13 +472,16 @@ def upload_tiktok(video, description, accountname, hashtags=None, sound_name=Non
|
|
463
472
|
print("Description and Hashtags added")
|
464
473
|
|
465
474
|
try:
|
466
|
-
page.
|
475
|
+
page.wait_for_selector('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Post")[aria-disabled="false"]', timeout=12000000)
|
467
476
|
except:
|
468
477
|
sys.exit("ERROR: TIK TOK TOOK TOO LONG TO UPLOAD YOUR FILE (>20min). Try again, if issue persists then try a lower file size or different wifi connection")
|
469
478
|
|
470
479
|
time.sleep(0.2)
|
471
480
|
if suppressprint == False:
|
472
481
|
print("Tik tok done loading file onto servers")
|
482
|
+
|
483
|
+
if (schedule == None) and (day != None):
|
484
|
+
sys.exit("ERROR: CANT SCHEDULE FOR ANOTHER DAY USING 'day' WITHOUT ALSO INCLUDING TIME OF UPLOAD WITH 'schedule'; PLEASE ALSO INCLUDE TIME WITH 'schedule' PARAMETER")
|
473
485
|
|
474
486
|
if schedule != None:
|
475
487
|
try:
|
@@ -513,93 +525,14 @@ def upload_tiktok(video, description, accountname, hashtags=None, sound_name=Non
|
|
513
525
|
|
514
526
|
except:
|
515
527
|
sys.exit("SCHEDULING ERROR: VIDEO SAVED AS DRAFT")
|
516
|
-
|
517
|
-
if (schedule == None) and (day != None):
|
518
|
-
sys.exit("ERROR: CANT SCHEDULE FOR ANOTHER DAY USING 'day' WITHOUT ALSO INCLUDING TIME OF UPLOAD WITH 'schedule'; PLEASE ALSO INCLUDE TIME WITH 'schedule' PARAMETER")
|
519
|
-
|
520
|
-
if(sound_name == None):
|
521
|
-
if copyrightcheck == True:
|
522
|
-
page.locator(".TUXSwitch-input").nth(0).click()
|
523
|
-
while copyrightcheck == True:
|
524
|
-
time.sleep(0.2)
|
525
|
-
if page.locator("span", has_text="No issues detected.").is_visible():
|
526
|
-
if suppressprint == False:
|
527
|
-
print("Copyright check complete")
|
528
|
-
break
|
529
|
-
if page.locator("span", has_text="Copyright issues detected.").is_visible():
|
530
|
-
sys.exit("COPYRIGHT CHECK FAILED: COPYRIGHT AUDIO DETECTED FROM TIKTOK")
|
531
|
-
|
532
|
-
if schedule == None:
|
533
|
-
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Post")', timeout=10000)
|
534
|
-
uploaded = False
|
535
|
-
checks = 0
|
536
|
-
while uploaded == False:
|
537
|
-
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
538
|
-
time.sleep(0.2)
|
539
|
-
break
|
540
|
-
time.sleep(0.2)
|
541
|
-
checks += 1
|
542
|
-
if checks > 100:
|
543
|
-
time.sleep(10)
|
544
|
-
if checks == 150:
|
545
|
-
break
|
546
|
-
else:
|
547
|
-
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Schedule")', timeout=10000)
|
548
|
-
uploaded = False
|
549
|
-
checks = 0
|
550
|
-
while uploaded == False:
|
551
|
-
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
552
|
-
time.sleep(0.2)
|
553
|
-
break
|
554
|
-
time.sleep(0.2)
|
555
|
-
checks += 1
|
556
|
-
if checks > 100:
|
557
|
-
time.sleep(10)
|
558
|
-
if checks == 150:
|
559
|
-
break
|
560
|
-
if suppressprint == False:
|
561
|
-
print("Done uploading video, NOTE: it may take a minute or two to show on TikTok")
|
562
|
-
|
563
|
-
page.close()
|
564
528
|
|
565
|
-
|
529
|
+
sound_fail = False
|
530
|
+
if sound_name != None:
|
566
531
|
try:
|
567
|
-
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--secondary:has-text("Save draft")', timeout=10000)
|
568
|
-
except:
|
569
|
-
sys.exit("SAVE AS DRAFT BUTTON NOT FOUND; CANNOT ADD SOUND WITHOUT ABILITY TO SAVE DRAFTS")
|
570
|
-
|
571
|
-
time.sleep(0.5)
|
572
|
-
page.close()
|
573
|
-
|
574
|
-
browser = p.chromium.launch(headless=True)
|
575
|
-
|
576
|
-
context = browser.new_context()
|
577
|
-
context.add_cookies(cookies)
|
578
|
-
page = context.new_page()
|
579
|
-
url2 = 'https://www.tiktok.com/tiktokstudio/content?tab=draft'
|
580
|
-
|
581
|
-
while retries < 2:
|
582
|
-
try:
|
583
|
-
page.goto(url2, timeout=30000)
|
584
|
-
except:
|
585
|
-
retries +=1
|
586
|
-
time.sleep(5)
|
587
|
-
if retries == 2:
|
588
|
-
sys.exit("ERROR: TIK TOK PAGE FAILED TO LOAD, try again.")
|
589
|
-
else:
|
590
|
-
break
|
591
|
-
|
592
|
-
try:
|
593
|
-
page.wait_for_selector("path[d='M37.37 4.85a4.01 4.01 0 0 0-.99-.79 3 3 0 0 0-2.72 0c-.45.23-.81.6-1 .79a9 9 0 0 1-.04.05l-19.3 19.3c-1.64 1.63-2.53 2.52-3.35 3.47a36 36 0 0 0-4.32 6.16c-.6 1.1-1.14 2.24-2.11 4.33l-.3.6c-.4.75-.84 1.61-.8 2.43a2.5 2.5 0 0 0 2.37 2.36c.82.05 1.68-.4 2.44-.79l.59-.3c2.09-.97 3.23-1.5 4.33-2.11a36 36 0 0 0 6.16-4.32c.95-.82 1.84-1.71 3.47-3.34l19.3-19.3.05-.06a3 3 0 0 0 .78-3.71c-.22-.45-.6-.81-.78-1l-.02-.02-.03-.03-3.67-3.67a8.7 8.7 0 0 1-.06-.05ZM16.2 26.97 35.02 8.15l2.83 2.83L19.03 29.8c-1.7 1.7-2.5 2.5-3.33 3.21a32 32 0 0 1-7.65 4.93 32 32 0 0 1 4.93-7.65c.73-.82 1.51-1.61 3.22-3.32Z']")
|
594
|
-
page.click("path[d='M37.37 4.85a4.01 4.01 0 0 0-.99-.79 3 3 0 0 0-2.72 0c-.45.23-.81.6-1 .79a9 9 0 0 1-.04.05l-19.3 19.3c-1.64 1.63-2.53 2.52-3.35 3.47a36 36 0 0 0-4.32 6.16c-.6 1.1-1.14 2.24-2.11 4.33l-.3.6c-.4.75-.84 1.61-.8 2.43a2.5 2.5 0 0 0 2.37 2.36c.82.05 1.68-.4 2.44-.79l.59-.3c2.09-.97 3.23-1.5 4.33-2.11a36 36 0 0 0 6.16-4.32c.95-.82 1.84-1.71 3.47-3.34l19.3-19.3.05-.06a3 3 0 0 0 .78-3.71c-.22-.45-.6-.81-.78-1l-.02-.02-.03-.03-3.67-3.67a8.7 8.7 0 0 1-.06-.05ZM16.2 26.97 35.02 8.15l2.83 2.83L19.03 29.8c-1.7 1.7-2.5 2.5-3.33 3.21a32 32 0 0 1-7.65 4.93 32 32 0 0 1 4.93-7.65c.73-.82 1.51-1.61 3.22-3.32Z']")
|
595
|
-
page.wait_for_selector('div[data-contents="true"]')
|
596
|
-
page.wait_for_function("document.querySelector('.info-progress-num').textContent.trim() === '100%'", timeout=3000000)
|
597
|
-
time.sleep(0.2)
|
598
|
-
except:
|
599
|
-
sys.exit("ERROR ADDING SOUND: Video saved as draft")
|
600
|
-
|
601
|
-
if sound_name != None:
|
602
532
|
page.click("div.TUXButton-label:has-text('Edit video')")
|
533
|
+
except:
|
534
|
+
sound_fail = True
|
535
|
+
if sound_fail == False:
|
603
536
|
page.wait_for_selector("input.search-bar-input")
|
604
537
|
page.fill(f"input.search-bar-input", f"{sound_name}")
|
605
538
|
time.sleep(0.2)
|
@@ -652,11 +585,154 @@ def upload_tiktok(video, description, accountname, hashtags=None, sound_name=Non
|
|
652
585
|
page.click("div.TUXButton-label:has-text('Save edit')")
|
653
586
|
if suppressprint == False:
|
654
587
|
print("Added sound")
|
655
|
-
|
588
|
+
|
589
|
+
if sound_fail == False:
|
590
|
+
page.wait_for_selector('div[data-contents="true"]')
|
591
|
+
|
592
|
+
if copyrightcheck == True:
|
593
|
+
page.click('div.TUXSwitch:has(label.TUXSwitch-label:has-text("Run a copyright check")) input.TUXSwitch-input')
|
594
|
+
while copyrightcheck == True:
|
595
|
+
time.sleep(0.2)
|
596
|
+
if page.locator("span", has_text="No issues detected.").is_visible():
|
597
|
+
if suppressprint == False:
|
598
|
+
print("Copyright check complete")
|
599
|
+
break
|
600
|
+
if page.locator("span", has_text="Copyright issues detected.").is_visible():
|
601
|
+
sys.exit("COPYRIGHT CHECK FAILED: VIDEO SAVED AS DRAFT, COPYRIGHT AUDIO DETECTED FROM TIKTOK")
|
602
|
+
|
603
|
+
|
604
|
+
try:
|
605
|
+
if schedule == None:
|
606
|
+
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Post")', timeout=10000)
|
607
|
+
uploaded = False
|
608
|
+
checks = 0
|
609
|
+
while uploaded == False:
|
610
|
+
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
611
|
+
time.sleep(0.2)
|
612
|
+
break
|
613
|
+
time.sleep(0.2)
|
614
|
+
checks += 1
|
615
|
+
if checks > 100:
|
616
|
+
time.sleep(10)
|
617
|
+
if checks == 150:
|
618
|
+
break
|
619
|
+
else:
|
620
|
+
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Schedule")', timeout=10000)
|
621
|
+
uploaded = False
|
622
|
+
checks = 0
|
623
|
+
while uploaded == False:
|
624
|
+
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
625
|
+
time.sleep(0.2)
|
626
|
+
break
|
627
|
+
time.sleep(0.2)
|
628
|
+
checks += 1
|
629
|
+
if checks > 100:
|
630
|
+
time.sleep(10)
|
631
|
+
if checks == 150:
|
632
|
+
break
|
633
|
+
if suppressprint == False:
|
634
|
+
print("Done uploading video, NOTE: it may take a minute or two to show on TikTok")
|
635
|
+
except:
|
636
|
+
time.sleep(5)
|
637
|
+
sys.exit("ERROR UPLOADING: VIDEO HAS SAVED AS DRAFT BUT CANT UPLOAD")
|
638
|
+
time.sleep(1)
|
639
|
+
|
640
|
+
page.close()
|
641
|
+
else:
|
642
|
+
try:
|
643
|
+
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--secondary:has-text("Save draft")', timeout=10000)
|
644
|
+
except:
|
645
|
+
sys.exit("SAVE AS DRAFT BUTTON NOT FOUND; Please try account that has ability to save as draft")
|
646
|
+
|
647
|
+
time.sleep(0.5)
|
648
|
+
page.close()
|
649
|
+
|
650
|
+
browser = p.chromium.launch(headless=True)
|
651
|
+
|
652
|
+
context = browser.new_context()
|
653
|
+
context.add_cookies(cookies)
|
654
|
+
page = context.new_page()
|
655
|
+
url2 = 'https://www.tiktok.com/tiktokstudio/content?tab=draft'
|
656
|
+
|
657
|
+
while retries < 2:
|
658
|
+
try:
|
659
|
+
page.goto(url2, timeout=30000)
|
660
|
+
except:
|
661
|
+
retries +=1
|
662
|
+
time.sleep(5)
|
663
|
+
if retries == 2:
|
664
|
+
sys.exit("ERROR: TIK TOK PAGE FAILED TO LOAD, try again.")
|
665
|
+
else:
|
666
|
+
break
|
667
|
+
|
668
|
+
try:
|
669
|
+
page.wait_for_selector("path[d='M37.37 4.85a4.01 4.01 0 0 0-.99-.79 3 3 0 0 0-2.72 0c-.45.23-.81.6-1 .79a9 9 0 0 1-.04.05l-19.3 19.3c-1.64 1.63-2.53 2.52-3.35 3.47a36 36 0 0 0-4.32 6.16c-.6 1.1-1.14 2.24-2.11 4.33l-.3.6c-.4.75-.84 1.61-.8 2.43a2.5 2.5 0 0 0 2.37 2.36c.82.05 1.68-.4 2.44-.79l.59-.3c2.09-.97 3.23-1.5 4.33-2.11a36 36 0 0 0 6.16-4.32c.95-.82 1.84-1.71 3.47-3.34l19.3-19.3.05-.06a3 3 0 0 0 .78-3.71c-.22-.45-.6-.81-.78-1l-.02-.02-.03-.03-3.67-3.67a8.7 8.7 0 0 1-.06-.05ZM16.2 26.97 35.02 8.15l2.83 2.83L19.03 29.8c-1.7 1.7-2.5 2.5-3.33 3.21a32 32 0 0 1-7.65 4.93 32 32 0 0 1 4.93-7.65c.73-.82 1.51-1.61 3.22-3.32Z']")
|
670
|
+
page.click("path[d='M37.37 4.85a4.01 4.01 0 0 0-.99-.79 3 3 0 0 0-2.72 0c-.45.23-.81.6-1 .79a9 9 0 0 1-.04.05l-19.3 19.3c-1.64 1.63-2.53 2.52-3.35 3.47a36 36 0 0 0-4.32 6.16c-.6 1.1-1.14 2.24-2.11 4.33l-.3.6c-.4.75-.84 1.61-.8 2.43a2.5 2.5 0 0 0 2.37 2.36c.82.05 1.68-.4 2.44-.79l.59-.3c2.09-.97 3.23-1.5 4.33-2.11a36 36 0 0 0 6.16-4.32c.95-.82 1.84-1.71 3.47-3.34l19.3-19.3.05-.06a3 3 0 0 0 .78-3.71c-.22-.45-.6-.81-.78-1l-.02-.02-.03-.03-3.67-3.67a8.7 8.7 0 0 1-.06-.05ZM16.2 26.97 35.02 8.15l2.83 2.83L19.03 29.8c-1.7 1.7-2.5 2.5-3.33 3.21a32 32 0 0 1-7.65 4.93 32 32 0 0 1 4.93-7.65c.73-.82 1.51-1.61 3.22-3.32Z']")
|
671
|
+
page.wait_for_selector('div[data-contents="true"]')
|
672
|
+
time.sleep(0.2)
|
673
|
+
except:
|
674
|
+
sys.exit("ERROR ADDING SOUND: Video saved as draft")
|
675
|
+
|
676
|
+
if sound_name != None:
|
677
|
+
page.click("div.TUXButton-label:has-text('Edit video')")
|
678
|
+
page.wait_for_selector("input.search-bar-input")
|
679
|
+
page.fill(f"input.search-bar-input", f"{sound_name}")
|
680
|
+
time.sleep(0.2)
|
681
|
+
page.click("div.TUXButton-label:has-text('Search')")
|
682
|
+
try:
|
683
|
+
page.wait_for_selector('div.music-card-container')
|
684
|
+
page.click("div.music-card-container")
|
685
|
+
page.wait_for_selector("div.TUXButton-label:has-text('Use')")
|
686
|
+
page.click("div.TUXButton-label:has-text('Use')")
|
687
|
+
except:
|
688
|
+
sys.exit(f"ERROR: SOUND '{sound_name}' NOT FOUND")
|
689
|
+
try:
|
690
|
+
page.wait_for_selector('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgNy41MDE2QzAgNi42NzMxNyAwLjY3MTU3MyA2LjAwMTYgMS41IDYuMDAxNkgzLjU3NzA5QzMuODY4MDUgNi4wMDE2IDQuMTQ0NTggNS44NzQ4OCA0LjMzNDU1IDUuNjU0NDlMOC43NDI1NSAwLjU0MDUyQzkuMzQ3OCAtMC4xNjE2NjggMTAuNSAwLjI2NjM3NCAxMC41IDEuMTkzNDFWMTguOTY3MkMxMC41IDE5Ljg3NDUgOS4zODg5NCAyMC4zMTI5IDguNzY5NDIgMTkuNjVMNC4zMzE3OSAxNC45MDIxQzQuMTQyNjkgMTQuNjk5OCAzLjg3ODE2IDE0LjU4NDkgMy42MDEyMiAxNC41ODQ5SDEuNUMwLjY3MTU3MyAxNC41ODQ5IDAgMTMuOTEzNCAwIDEzLjA4NDlWNy41MDE2Wk01Ljg0OTQ1IDYuOTYwMjdDNS4yNzk1NiA3LjYyMTQzIDQuNDQ5OTcgOC4wMDE2IDMuNTc3MDkgOC4wMDE2SDJWMTIuNTg0OUgzLjYwMTIyQzQuNDMyMDMgMTIuNTg0OSA1LjIyNTY0IDEyLjkyOTUgNS43OTI5NSAxMy41MzY0TDguNSAxNi40MzI4VjMuODg1MjJMNS44NDk0NSA2Ljk2MDI3WiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPHBhdGggZD0iTTEzLjUxNSA3LjE5MTE5QzEzLjM0MjQgNi45NzU1OSAxMy4zMzk5IDYuNjYwNTYgMTMuNTM1MiA2LjQ2NTNMMTQuMjQyMyA1Ljc1ODE5QzE0LjQzNzYgNS41NjI5MyAxNC43NTU4IDUuNTYxNzUgMTQuOTM1NiA1Ljc3MTM2QzE2Ljk5NTkgOC4xNzM2MiAxNi45OTU5IDExLjgyOCAxNC45MzU2IDE0LjIzMDNDMTQuNzU1OCAxNC40Mzk5IDE0LjQzNzYgMTQuNDM4NyAxNC4yNDIzIDE0LjI0MzVMMTMuNTM1MiAxMy41MzY0QzEzLjMzOTkgMTMuMzQxMSAxMy4zNDI0IDEzLjAyNjEgMTMuNTE1IDEyLjgxMDVDMTQuODEzIDExLjE4ODUgMTQuODEzIDguODEzMTIgMTMuNTE1IDcuMTkxMTlaIiBmaWxsPSIjMTYxODIzIiBmaWxsLW9wYWNpdHk9IjAuNiIvPgo8cGF0aCBkPSJNMTYuNzE3MiAxNi43MTgzQzE2LjUyMTkgMTYuNTIzMSAxNi41MjMxIDE2LjIwNzQgMTYuNzA3MiAxNi4wMDE3QzE5LjcyNTcgMTIuNjMgMTkuNzI1NyA3LjM3MTY4IDE2LjcwNzIgNC4wMDAwMUMxNi41MjMxIDMuNzk0MjcgMTYuNTIxOSAzLjQ3ODU4IDE2LjcxNzIgMy4yODMzMkwxNy40MjQzIDIuNTc2MjFDMTcuNjE5NSAyLjM4MDk1IDE3LjkzNyAyLjM4MDIgMTguMTIzMyAyLjU4NDA4QzIxLjkwOTkgNi43MjkyNiAyMS45MDk5IDEzLjI3MjQgMTguMTIzMyAxNy40MTc2QzE3LjkzNyAxNy42MjE1IDE3LjYxOTUgMTcuNjIwNyAxNy40MjQzIDE3LjQyNTVMMTYuNzE3MiAxNi43MTgzWiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPC9zdmc+Cg=="]')
|
691
|
+
page.click('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgNy41MDE2QzAgNi42NzMxNyAwLjY3MTU3MyA2LjAwMTYgMS41IDYuMDAxNkgzLjU3NzA5QzMuODY4MDUgNi4wMDE2IDQuMTQ0NTggNS44NzQ4OCA0LjMzNDU1IDUuNjU0NDlMOC43NDI1NSAwLjU0MDUyQzkuMzQ3OCAtMC4xNjE2NjggMTAuNSAwLjI2NjM3NCAxMC41IDEuMTkzNDFWMTguOTY3MkMxMC41IDE5Ljg3NDUgOS4zODg5NCAyMC4zMTI5IDguNzY5NDIgMTkuNjVMNC4zMzE3OSAxNC45MDIxQzQuMTQyNjkgMTQuNjk5OCAzLjg3ODE2IDE0LjU4NDkgMy42MDEyMiAxNC41ODQ5SDEuNUMwLjY3MTU3MyAxNC41ODQ5IDAgMTMuOTEzNCAwIDEzLjA4NDlWNy41MDE2Wk01Ljg0OTQ1IDYuOTYwMjdDNS4yNzk1NiA3LjYyMTQzIDQuNDQ5OTcgOC4wMDE2IDMuNTc3MDkgOC4wMDE2SDJWMTIuNTg0OUgzLjYwMTIyQzQuNDMyMDMgMTIuNTg0OSA1LjIyNTY0IDEyLjkyOTUgNS43OTI5NSAxMy41MzY0TDguNSAxNi40MzI4VjMuODg1MjJMNS44NDk0NSA2Ljk2MDI3WiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPHBhdGggZD0iTTEzLjUxNSA3LjE5MTE5QzEzLjM0MjQgNi45NzU1OSAxMy4zMzk5IDYuNjYwNTYgMTMuNTM1MiA2LjQ2NTNMMTQuMjQyMyA1Ljc1ODE5QzE0LjQzNzYgNS41NjI5MyAxNC43NTU4IDUuNTYxNzUgMTQuOTM1NiA1Ljc3MTM2QzE2Ljk5NTkgOC4xNzM2MiAxNi45OTU5IDExLjgyOCAxNC45MzU2IDE0LjIzMDNDMTQuNzU1OCAxNC40Mzk5IDE0LjQzNzYgMTQuNDM4NyAxNC4yNDIzIDE0LjI0MzVMMTMuNTM1MiAxMy41MzY0QzEzLjMzOTkgMTMuMzQxMSAxMy4zNDI0IDEzLjAyNjEgMTMuNTE1IDEyLjgxMDVDMTQuODEzIDExLjE4ODUgMTQuODEzIDguODEzMTIgMTMuNTE1IDcuMTkxMTlaIiBmaWxsPSIjMTYxODIzIiBmaWxsLW9wYWNpdHk9IjAuNiIvPgo8cGF0aCBkPSJNMTYuNzE3MiAxNi43MTgzQzE2LjUyMTkgMTYuNTIzMSAxNi41MjMxIDE2LjIwNzQgMTYuNzA3MiAxNi4wMDE3QzE5LjcyNTcgMTIuNjMgMTkuNzI1NyA3LjM3MTY4IDE2LjcwNzIgNC4wMDAwMUMxNi41MjMxIDMuNzk0MjcgMTYuNTIxOSAzLjQ3ODU4IDE2LjcxNzIgMy4yODMzMkwxNy40MjQzIDIuNTc2MjFDMTcuNjE5NSAyLjM4MDk1IDE3LjkzNyAyLjM4MDIgMTguMTIzMyAyLjU4NDA4QzIxLjkwOTkgNi43MjkyNiAyMS45MDk5IDEzLjI3MjQgMTguMTIzMyAxNy40MTc2QzE3LjkzNyAxNy42MjE1IDE3LjYxOTUgMTcuNjIwNyAxNy40MjQzIDE3LjQyNTVMMTYuNzE3MiAxNi43MTgzWiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPC9zdmc+Cg=="]')
|
692
|
+
time.sleep(0.5)
|
693
|
+
sliders = page.locator("input.scaleInput")
|
694
|
+
|
695
|
+
if sound_aud_vol == 'background':
|
696
|
+
slider1 = sliders.nth(0)
|
697
|
+
bounding_box1 = slider1.bounding_box()
|
698
|
+
if bounding_box1:
|
699
|
+
x1 = bounding_box1["x"] + (bounding_box1["width"] * 0.92)
|
700
|
+
y1 = bounding_box1["y"] + bounding_box1["height"] / 2
|
701
|
+
page.mouse.click(x1, y1)
|
702
|
+
|
703
|
+
slider2 = sliders.nth(1)
|
704
|
+
bounding_box2 = slider2.bounding_box()
|
705
|
+
if bounding_box2:
|
706
|
+
x2 = bounding_box2["x"] + (bounding_box2["width"] * 0.097)
|
707
|
+
y2 = bounding_box2["y"] + bounding_box2["height"] / 2
|
708
|
+
page.mouse.click(x2, y2)
|
709
|
+
|
710
|
+
if sound_aud_vol == 'main':
|
711
|
+
slider1 = sliders.nth(0)
|
712
|
+
bounding_box1 = slider1.bounding_box()
|
713
|
+
if bounding_box1:
|
714
|
+
x1 = bounding_box1["x"] + (bounding_box1["width"] * 0.092)
|
715
|
+
y1 = bounding_box1["y"] + bounding_box1["height"] / 2
|
716
|
+
page.mouse.click(x1, y1)
|
717
|
+
slider2 = sliders.nth(1)
|
718
|
+
bounding_box2 = slider2.bounding_box()
|
719
|
+
if bounding_box2:
|
720
|
+
x2 = bounding_box2["x"] + (bounding_box2["width"] * 0.92)
|
721
|
+
y2 = bounding_box2["y"] + bounding_box2["height"] / 2
|
722
|
+
page.mouse.click(x2, y2)
|
723
|
+
except:
|
724
|
+
sys.exit("ERROR ADJUSTING SOUND VOLUME: please try again.")
|
725
|
+
|
726
|
+
page.wait_for_selector("div.TUXButton-label:has-text('Save edit')")
|
727
|
+
page.click("div.TUXButton-label:has-text('Save edit')")
|
728
|
+
if suppressprint == False:
|
729
|
+
print("Added sound")
|
730
|
+
|
731
|
+
|
656
732
|
page.wait_for_selector('div[data-contents="true"]')
|
657
733
|
|
658
734
|
if copyrightcheck == True:
|
659
|
-
page.
|
735
|
+
page.click('div.TUXSwitch:has(label.TUXSwitch-label:has-text("Run a copyright check")) input.TUXSwitch-input')
|
660
736
|
while copyrightcheck == True:
|
661
737
|
time.sleep(0.2)
|
662
738
|
if page.locator("span", has_text="No issues detected.").is_visible():
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: tiktokautouploader
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.18
|
4
4
|
Summary: Upload or schedule videos to TikTok with viral TikTok sounds and hashtags.
|
5
5
|
Project-URL: Homepage, https://github.com/haziq-exe/TikTokAutoUploader
|
6
6
|
Author-email: HAZIQ <haziqmk123@gmail.com>
|
@@ -29,9 +29,8 @@ Description-Content-Type: text/markdown
|
|
29
29
|
|
30
30
|
[](https://pypi.org/project/tiktokautouploader/) [](https://opensource.org/licenses/MIT)
|
31
31
|
|
32
|
-
|
33
32
|
<p align="center">
|
34
|
-
<img src="READMEimage/
|
33
|
+
<img src="READMEimage/READMEGIF.gif" alt="" width="900"/>
|
35
34
|
</p>
|
36
35
|
|
37
36
|
## 🚀 Features
|
@@ -44,6 +43,8 @@ Description-Content-Type: text/markdown
|
|
44
43
|
- **⏰ Cutdown on upload time:** Upload to TikTok with way less hassle and much more speed using our library.
|
45
44
|
- **📝 Upload to different accounts:** Stay organized and on top of multiple different accounts with our multi-account functionality.
|
46
45
|
|
46
|
+
⭐️ If you like this project please feel free to star it, Thank you.
|
47
|
+
|
47
48
|
## 📦 Installation
|
48
49
|
|
49
50
|
1. **Python Installation:** Install the package using `pip`:
|
@@ -143,4 +144,10 @@ Created by **Haziq**. Feel free to reach out at [haziqmk123@gmail.com](mailto:ha
|
|
143
144
|
## 📄 License
|
144
145
|
|
145
146
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE.md) file for details.
|
146
|
-
|
147
|
+
|
148
|
+
## 📮 Related Projects
|
149
|
+
|
150
|
+
If you liked this project please check out my use case showcase project that generates TikToks and uploads them using 'tiktokautouploader'
|
151
|
+
|
152
|
+
[TikTokGenerator](https://github.com/haziq-exe/TikTokGenerator)
|
153
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
tiktokautouploader/__init__.py,sha256=u7OWCK_u68ST8dfrkSF4Yw44CJOzV9NXI6ASRuoDfmE,64
|
2
|
+
tiktokautouploader/function.py,sha256=nSkkKC2BgnpYKGPiQmYki_J7lbSjnRtXH9nqCpAeGeY,43146
|
3
|
+
tiktokautouploader/Js_assets/login.js,sha256=SLhtPYo8ZfTRUnbR7Xqp084lSuAOqIWUxi75FlFH3vs,966
|
4
|
+
tiktokautouploader-3.18.dist-info/METADATA,sha256=ufyQiEuanGdI58GfxxryWDXaF-W0JYuiMMI6_Lx3Ack,6162
|
5
|
+
tiktokautouploader-3.18.dist-info/WHEEL,sha256=fl6v0VwpzfGBVsGtkAkhILUlJxROXbA3HvRL6Fe3140,105
|
6
|
+
tiktokautouploader-3.18.dist-info/licenses/LICENSE.md,sha256=hYds_VJIpnS5gC73WhuWk2IY_e9BWjuEJthQCb9ThyU,1073
|
7
|
+
tiktokautouploader-3.18.dist-info/RECORD,,
|
@@ -1,7 +0,0 @@
|
|
1
|
-
tiktokautouploader/__init__.py,sha256=u7OWCK_u68ST8dfrkSF4Yw44CJOzV9NXI6ASRuoDfmE,64
|
2
|
-
tiktokautouploader/function.py,sha256=vR2ELk1ydps0K9nhA1bxIc2Cf3d5qbvfRm3wUxkDEyk,35292
|
3
|
-
tiktokautouploader/Js_assets/login.js,sha256=SLhtPYo8ZfTRUnbR7Xqp084lSuAOqIWUxi75FlFH3vs,966
|
4
|
-
tiktokautouploader-3.14.dist-info/METADATA,sha256=9AoqNXOcgyMZyvhgx2bB06uj5uq4caZxge7JyWJbloU,5862
|
5
|
-
tiktokautouploader-3.14.dist-info/WHEEL,sha256=fl6v0VwpzfGBVsGtkAkhILUlJxROXbA3HvRL6Fe3140,105
|
6
|
-
tiktokautouploader-3.14.dist-info/licenses/LICENSE.md,sha256=hYds_VJIpnS5gC73WhuWk2IY_e9BWjuEJthQCb9ThyU,1073
|
7
|
-
tiktokautouploader-3.14.dist-info/RECORD,,
|
File without changes
|
File without changes
|