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.
@@ -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
- model = inference.get_model("captcha-2-6ehbe/2")
150
- results = model.infer(image=image_path)
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[0].predictions:
155
- class_names.append(obj.class_name)
156
+ for obj in results['predictions']:
157
+ class_names.append(obj['class'])
156
158
  bounding_boxes.append({
157
- "x": obj.x,
158
- "y": obj.y,
159
- "width": obj.width,
160
- "height": obj.height
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
- model = inference.get_model("tk-3nwi9/2")
176
- results = model.infer(image=image_path)
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[0].predictions:
181
- class_names.append(obj.class_name)
189
+ for obj in results['predictions']:
190
+ class_names.append(obj['class'])
182
191
  bounding_boxes.append({
183
- "x": obj.x,
184
- "y": obj.y,
185
- "width": obj.width,
186
- "height": obj.height
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, classes in enumerate(class_names):
193
- if classes in already_written:
194
- class_to_click.append(classes)
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(classes)
205
+ index = already_written.index(detected_class)
197
206
  bounding_box.append(bounding_boxes[index])
198
207
 
199
- already_written.append(classes)
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.wait_for_function("document.querySelector('.info-progress-num').textContent.trim() === '100%'", timeout=12000000)
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
- else:
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.locator(".TUXSwitch-input").nth(0).click()
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.14
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
  [![PyPI version](https://img.shields.io/pypi/v/tiktokautouploader.svg)](https://pypi.org/project/tiktokautouploader/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
31
31
 
32
-
33
32
  <p align="center">
34
- <img src="READMEimage/READMEvid.gif" alt="" width="900"/>
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,,