tiktokautouploader 2.7__py2.py3-none-any.whl → 2.8__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/Js_assets/login.js +7 -10
- tiktokautouploader/function.py +178 -108
- {tiktokautouploader-2.7.dist-info → tiktokautouploader-2.8.dist-info}/METADATA +1 -1
- tiktokautouploader-2.8.dist-info/RECORD +7 -0
- tiktokautouploader-2.7.dist-info/RECORD +0 -7
- {tiktokautouploader-2.7.dist-info → tiktokautouploader-2.8.dist-info}/WHEEL +0 -0
- {tiktokautouploader-2.7.dist-info → tiktokautouploader-2.8.dist-info}/licenses/LICENSE.md +0 -0
@@ -1,18 +1,16 @@
|
|
1
1
|
const { chromium } = require('playwright-extra')
|
2
2
|
|
3
|
-
|
4
|
-
// Note: playwright-extra is compatible with most puppeteer-extra plugins
|
3
|
+
|
5
4
|
const stealth = require('puppeteer-extra-plugin-stealth')()
|
6
5
|
|
7
|
-
// Add the plugin to playwright (any number of plugins can be added)
|
8
6
|
chromium.use(stealth)
|
9
7
|
|
10
|
-
|
11
|
-
function
|
8
|
+
|
9
|
+
function sleep(time) {
|
12
10
|
return new Promise(resolve => setTimeout(resolve, time));
|
13
11
|
}
|
14
12
|
|
15
|
-
|
13
|
+
|
16
14
|
async function checkForRedirect(page) {
|
17
15
|
const currentUrl = page.url();
|
18
16
|
const pattern = /^https:\/\/www\.tiktok\.com\/foryou/;
|
@@ -25,19 +23,18 @@ async function checkForRedirect(page) {
|
|
25
23
|
const page = await browser.newPage();
|
26
24
|
await page.goto('https://www.tiktok.com/login');
|
27
25
|
|
28
|
-
// Loop until redirect is detected
|
29
26
|
while (!redirected) {
|
30
27
|
redirected = await checkForRedirect(page);
|
31
28
|
if (!redirected) {
|
32
|
-
await
|
29
|
+
await sleep(1000);
|
33
30
|
}
|
34
31
|
}
|
35
32
|
|
36
|
-
|
33
|
+
sleep(2000)
|
37
34
|
const cookies = await page.context().cookies();
|
38
35
|
const fs = require('fs');
|
39
36
|
fs.writeFileSync('TK_cookies.json', JSON.stringify(cookies, null, 2));
|
40
37
|
|
41
|
-
|
38
|
+
|
42
39
|
await browser.close();
|
43
40
|
})();
|
tiktokautouploader/function.py
CHANGED
@@ -11,8 +11,6 @@ import os
|
|
11
11
|
import warnings
|
12
12
|
warnings.filterwarnings("ignore")
|
13
13
|
|
14
|
-
def no_draft_warning():
|
15
|
-
print("SAVE AS DRAFT BUTTON NOT FOUND; CODE WILL CONTINUE RUNNING BUT VIDEO IS UNLIKELY TO UPLOAD; BEING ABLE TO SAVE AS DRAFT IS ESSENTIAL TO BEING ABLE TO EDIT VIDEOS AND POST, PLEASE BUILD UP ENOUGH ACCOUNT HISTORY TO BE ABLE TO SAVE DRAFTS ")
|
16
14
|
|
17
15
|
def login_warning():
|
18
16
|
print("NO COOKIES FILE FOUND, PLEASE LOG-IN WHEN PROMPTED")
|
@@ -24,7 +22,6 @@ def save_cookies(cookies):
|
|
24
22
|
def run_javascript():
|
25
23
|
js_file_path = pkg_resources.resource_filename(__name__, 'Js_assets/login.js')
|
26
24
|
result = subprocess.run(['node', js_file_path], capture_output=True, text=True)
|
27
|
-
return result.stdout, result.stderr
|
28
25
|
|
29
26
|
def install_js_dependencies():
|
30
27
|
js_dir = pkg_resources.resource_filename(__name__, 'Js_assets')
|
@@ -34,7 +31,6 @@ def install_js_dependencies():
|
|
34
31
|
print("JavaScript dependencies not found. Installing...")
|
35
32
|
subprocess.run(['npm', 'install', 'playwright', 'playwright-extra', 'puppeteer-extra-plugin-stealth', '--silent'], cwd=js_dir, check=True)
|
36
33
|
else:
|
37
|
-
print("found dependencies")
|
38
34
|
time.sleep(0.1)
|
39
35
|
|
40
36
|
|
@@ -197,7 +193,6 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
197
193
|
video (str) -> path to video to upload
|
198
194
|
description (str) -> description for video
|
199
195
|
hashtags (str)(array) -> hashtags for video
|
200
|
-
cookies_path (str) -> path to tik tok cookies .json file
|
201
196
|
sound_name (str) -> name of tik tok sound to use for video
|
202
197
|
sound_aud_vol (str) -> volume of tik tok sound, 'main', 'mix' or 'background', check documentation for more info -> https://github.com/haziq-exe/TikTokAutoUploader
|
203
198
|
schedule (str) -> format HH:MM, your local time to upload video
|
@@ -224,11 +219,14 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
224
219
|
|
225
220
|
|
226
221
|
with sync_playwright() as p:
|
227
|
-
|
222
|
+
|
223
|
+
browser = p.firefox.launch(headless=True)
|
224
|
+
|
228
225
|
context = browser.new_context()
|
229
226
|
context.add_cookies(cookies)
|
230
227
|
page = context.new_page()
|
231
228
|
url = 'https://www.tiktok.com/tiktokstudio/upload?from=upload&lang=en'
|
229
|
+
url2 = 'https://www.tiktok.com/tiktokstudio/content?tab=draft'
|
232
230
|
|
233
231
|
while retries < 2:
|
234
232
|
try:
|
@@ -245,6 +243,7 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
245
243
|
captcha = False
|
246
244
|
while detected == False:
|
247
245
|
if page.locator('.upload-text-container').is_visible():
|
246
|
+
print("Showed up")
|
248
247
|
detected = True
|
249
248
|
else:
|
250
249
|
if page.locator('div.VerifyBar___StyledDiv-sc-12zaxoy-0.hRJhHT').is_visible():
|
@@ -254,7 +253,6 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
254
253
|
time.sleep(0.1)
|
255
254
|
|
256
255
|
if captcha == True:
|
257
|
-
print("CAPTCHA FOUND")
|
258
256
|
image = get_image_src(page)
|
259
257
|
if image:
|
260
258
|
if suppressprint == False:
|
@@ -291,7 +289,7 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
291
289
|
if attempts > 5:
|
292
290
|
sys.exit("FAILED TO SOLVE CAPTCHA")
|
293
291
|
try:
|
294
|
-
page.wait_for_selector('.upload-text-container', timeout=
|
292
|
+
page.wait_for_selector('.upload-text-container', timeout=5000)
|
295
293
|
os.remove('captcha_image.jpg')
|
296
294
|
if suppressprint == False:
|
297
295
|
print("Captcha Solved")
|
@@ -308,7 +306,6 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
308
306
|
while objectclick == 'N.A':
|
309
307
|
page.click('span.secsdk_captcha_refresh--text')
|
310
308
|
page.wait_for_selector('div.VerifyBar___StyledDiv-sc-12zaxoy-0.hRJhHT')
|
311
|
-
time.sleep(2)
|
312
309
|
question = page.locator('div.VerifyBar___StyledDiv-sc-12zaxoy-0.hRJhHT').text_content()
|
313
310
|
objectclick = understood_Qs(question)
|
314
311
|
image = get_image_src(page)
|
@@ -336,7 +333,7 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
336
333
|
if attempts > 5:
|
337
334
|
sys.exit("FAILED TO SOLVE CAPTCHA")
|
338
335
|
try:
|
339
|
-
page.wait_for_selector('.upload-text-container', timeout=
|
336
|
+
page.wait_for_selector('.upload-text-container', timeout=5000)
|
340
337
|
solved = True
|
341
338
|
os.remove('captcha_image.jpg')
|
342
339
|
if suppressprint == False:
|
@@ -344,13 +341,11 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
344
341
|
except:
|
345
342
|
continue
|
346
343
|
|
347
|
-
|
348
344
|
|
349
345
|
try:
|
350
346
|
page.set_input_files('input[type="file"][accept="video/*"]', f'{video}')
|
351
347
|
except:
|
352
348
|
sys.exit("ERROR: FAILED TO INPUT FILE. Possible Issues: Wifi too slow, file directory wrong, or check documentation to see if captcha is solvable")
|
353
|
-
|
354
349
|
page.wait_for_selector('div[data-contents="true"]')
|
355
350
|
page.click('div[data-contents="true"]')
|
356
351
|
if suppressprint == False:
|
@@ -400,75 +395,10 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
400
395
|
except:
|
401
396
|
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")
|
402
397
|
|
403
|
-
time.sleep(0.
|
398
|
+
time.sleep(0.2)
|
404
399
|
if suppressprint == False:
|
405
400
|
print("Tik tok done loading file onto servers")
|
406
|
-
|
407
|
-
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--secondary:has-text("Save draft")', timeout=10000)
|
408
|
-
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']")
|
409
|
-
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']")
|
410
|
-
page.wait_for_selector('div[data-contents="true"]')
|
411
|
-
page.wait_for_function("document.querySelector('.info-progress-num').textContent.trim() === '100%'", timeout=3000000)
|
412
|
-
time.sleep(0.5)
|
413
|
-
except:
|
414
|
-
no_draft_warning()
|
415
|
-
|
416
|
-
if sound_name != None:
|
417
|
-
page.click("div.TUXButton-label:has-text('Edit video')")
|
418
|
-
page.wait_for_selector("input.search-bar-input")
|
419
|
-
page.fill(f"input.search-bar-input", f"{sound_name}")
|
420
|
-
time.sleep(0.5)
|
421
|
-
page.click("div.TUXButton-label:has-text('Search')")
|
422
|
-
try:
|
423
|
-
page.wait_for_selector('div.music-card-container')
|
424
|
-
page.click("div.music-card-container")
|
425
|
-
page.wait_for_selector("div.TUXButton-label:has-text('Use')")
|
426
|
-
page.click("div.TUXButton-label:has-text('Use')")
|
427
|
-
except:
|
428
|
-
sys.exit("ERROR: SOUND NOT FOUND, VIDEO SAVED AS DRAFT")
|
429
|
-
try:
|
430
|
-
page.wait_for_selector('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgNy41MDE2QzAgNi42NzMxNyAwLjY3MTU3MyA2LjAwMTYgMS41IDYuMDAxNkgzLjU3NzA5QzMuODY4MDUgNi4wMDE2IDQuMTQ0NTggNS44NzQ4OCA0LjMzNDU1IDUuNjU0NDlMOC43NDI1NSAwLjU0MDUyQzkuMzQ3OCAtMC4xNjE2NjggMTAuNSAwLjI2NjM3NCAxMC41IDEuMTkzNDFWMTguOTY3MkMxMC41IDE5Ljg3NDUgOS4zODg5NCAyMC4zMTI5IDguNzY5NDIgMTkuNjVMNC4zMzE3OSAxNC45MDIxQzQuMTQyNjkgMTQuNjk5OCAzLjg3ODE2IDE0LjU4NDkgMy42MDEyMiAxNC41ODQ5SDEuNUMwLjY3MTU3MyAxNC41ODQ5IDAgMTMuOTEzNCAwIDEzLjA4NDlWNy41MDE2Wk01Ljg0OTQ1IDYuOTYwMjdDNS4yNzk1NiA3LjYyMTQzIDQuNDQ5OTcgOC4wMDE2IDMuNTc3MDkgOC4wMDE2SDJWMTIuNTg0OUgzLjYwMTIyQzQuNDMyMDMgMTIuNTg0OSA1LjIyNTY0IDEyLjkyOTUgNS43OTI5NSAxMy41MzY0TDguNSAxNi40MzI4VjMuODg1MjJMNS44NDk0NSA2Ljk2MDI3WiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPHBhdGggZD0iTTEzLjUxNSA3LjE5MTE5QzEzLjM0MjQgNi45NzU1OSAxMy4zMzk5IDYuNjYwNTYgMTMuNTM1MiA2LjQ2NTNMMTQuMjQyMyA1Ljc1ODE5QzE0LjQzNzYgNS41NjI5MyAxNC43NTU4IDUuNTYxNzUgMTQuOTM1NiA1Ljc3MTM2QzE2Ljk5NTkgOC4xNzM2MiAxNi45OTU5IDExLjgyOCAxNC45MzU2IDE0LjIzMDNDMTQuNzU1OCAxNC40Mzk5IDE0LjQzNzYgMTQuNDM4NyAxNC4yNDIzIDE0LjI0MzVMMTMuNTM1MiAxMy41MzY0QzEzLjMzOTkgMTMuMzQxMSAxMy4zNDI0IDEzLjAyNjEgMTMuNTE1IDEyLjgxMDVDMTQuODEzIDExLjE4ODUgMTQuODEzIDguODEzMTIgMTMuNTE1IDcuMTkxMTlaIiBmaWxsPSIjMTYxODIzIiBmaWxsLW9wYWNpdHk9IjAuNiIvPgo8cGF0aCBkPSJNMTYuNzE3MiAxNi43MTgzQzE2LjUyMTkgMTYuNTIzMSAxNi41MjMxIDE2LjIwNzQgMTYuNzA3MiAxNi4wMDE3QzE5LjcyNTcgMTIuNjMgMTkuNzI1NyA3LjM3MTY4IDE2LjcwNzIgNC4wMDAwMUMxNi41MjMxIDMuNzk0MjcgMTYuNTIxOSAzLjQ3ODU4IDE2LjcxNzIgMy4yODMzMkwxNy40MjQzIDIuNTc2MjFDMTcuNjE5NSAyLjM4MDk1IDE3LjkzNyAyLjM4MDIgMTguMTIzMyAyLjU4NDA4QzIxLjkwOTkgNi43MjkyNiAyMS45MDk5IDEzLjI3MjQgMTguMTIzMyAxNy40MTc2QzE3LjkzNyAxNy42MjE1IDE3LjYxOTUgMTcuNjIwNyAxNy40MjQzIDE3LjQyNTVMMTYuNzE3MiAxNi43MTgzWiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPC9zdmc+Cg=="]')
|
431
|
-
page.click('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgNy41MDE2QzAgNi42NzMxNyAwLjY3MTU3MyA2LjAwMTYgMS41IDYuMDAxNkgzLjU3NzA5QzMuODY4MDUgNi4wMDE2IDQuMTQ0NTggNS44NzQ4OCA0LjMzNDU1IDUuNjU0NDlMOC43NDI1NSAwLjU0MDUyQzkuMzQ3OCAtMC4xNjE2NjggMTAuNSAwLjI2NjM3NCAxMC41IDEuMTkzNDFWMTguOTY3MkMxMC41IDE5Ljg3NDUgOS4zODg5NCAyMC4zMTI5IDguNzY5NDIgMTkuNjVMNC4zMzE3OSAxNC45MDIxQzQuMTQyNjkgMTQuNjk5OCAzLjg3ODE2IDE0LjU4NDkgMy42MDEyMiAxNC41ODQ5SDEuNUMwLjY3MTU3MyAxNC41ODQ5IDAgMTMuOTEzNCAwIDEzLjA4NDlWNy41MDE2Wk01Ljg0OTQ1IDYuOTYwMjdDNS4yNzk1NiA3LjYyMTQzIDQuNDQ5OTcgOC4wMDE2IDMuNTc3MDkgOC4wMDE2SDJWMTIuNTg0OUgzLjYwMTIyQzQuNDMyMDMgMTIuNTg0OSA1LjIyNTY0IDEyLjkyOTUgNS43OTI5NSAxMy41MzY0TDguNSAxNi40MzI4VjMuODg1MjJMNS44NDk0NSA2Ljk2MDI3WiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPHBhdGggZD0iTTEzLjUxNSA3LjE5MTE5QzEzLjM0MjQgNi45NzU1OSAxMy4zMzk5IDYuNjYwNTYgMTMuNTM1MiA2LjQ2NTNMMTQuMjQyMyA1Ljc1ODE5QzE0LjQzNzYgNS41NjI5MyAxNC43NTU4IDUuNTYxNzUgMTQuOTM1NiA1Ljc3MTM2QzE2Ljk5NTkgOC4xNzM2MiAxNi45OTU5IDExLjgyOCAxNC45MzU2IDE0LjIzMDNDMTQuNzU1OCAxNC40Mzk5IDE0LjQzNzYgMTQuNDM4NyAxNC4yNDIzIDE0LjI0MzVMMTMuNTM1MiAxMy41MzY0QzEzLjMzOTkgMTMuMzQxMSAxMy4zNDI0IDEzLjAyNjEgMTMuNTE1IDEyLjgxMDVDMTQuODEzIDExLjE4ODUgMTQuODEzIDguODEzMTIgMTMuNTE1IDcuMTkxMTlaIiBmaWxsPSIjMTYxODIzIiBmaWxsLW9wYWNpdHk9IjAuNiIvPgo8cGF0aCBkPSJNMTYuNzE3MiAxNi43MTgzQzE2LjUyMTkgMTYuNTIzMSAxNi41MjMxIDE2LjIwNzQgMTYuNzA3MiAxNi4wMDE3QzE5LjcyNTcgMTIuNjMgMTkuNzI1NyA3LjM3MTY4IDE2LjcwNzIgNC4wMDAwMUMxNi41MjMxIDMuNzk0MjcgMTYuNTIxOSAzLjQ3ODU4IDE2LjcxNzIgMy4yODMzMkwxNy40MjQzIDIuNTc2MjFDMTcuNjE5NSAyLjM4MDk1IDE3LjkzNyAyLjM4MDIgMTguMTIzMyAyLjU4NDA4QzIxLjkwOTkgNi43MjkyNiAyMS45MDk5IDEzLjI3MjQgMTguMTIzMyAxNy40MTc2QzE3LjkzNyAxNy42MjE1IDE3LjYxOTUgMTcuNjIwNyAxNy40MjQzIDE3LjQyNTVMMTYuNzE3MiAxNi43MTgzWiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPC9zdmc+Cg=="]')
|
432
|
-
time.sleep(0.5)
|
433
|
-
sliders = page.locator("input.scaleInput")
|
434
|
-
|
435
|
-
if sound_aud_vol == 'background':
|
436
|
-
slider1 = sliders.nth(0)
|
437
|
-
bounding_box1 = slider1.bounding_box()
|
438
|
-
if bounding_box1:
|
439
|
-
x1 = bounding_box1["x"] + (bounding_box1["width"] * 0.95)
|
440
|
-
y1 = bounding_box1["y"] + bounding_box1["height"] / 2
|
441
|
-
page.mouse.click(x1, y1)
|
442
|
-
|
443
|
-
slider2 = sliders.nth(1)
|
444
|
-
bounding_box2 = slider2.bounding_box()
|
445
|
-
if bounding_box2:
|
446
|
-
x2 = bounding_box2["x"] + (bounding_box2["width"] * 0.097)
|
447
|
-
y2 = bounding_box2["y"] + bounding_box2["height"] / 2
|
448
|
-
page.mouse.click(x2, y2)
|
449
|
-
|
450
|
-
if sound_aud_vol == 'main':
|
451
|
-
slider1 = sliders.nth(0)
|
452
|
-
bounding_box1 = slider1.bounding_box()
|
453
|
-
if bounding_box1:
|
454
|
-
x1 = bounding_box1["x"] + (bounding_box1["width"] * 0.097)
|
455
|
-
y1 = bounding_box1["y"] + bounding_box1["height"] / 2
|
456
|
-
page.mouse.click(x1, y1)
|
457
|
-
slider2 = sliders.nth(1)
|
458
|
-
bounding_box2 = slider2.bounding_box()
|
459
|
-
if bounding_box2:
|
460
|
-
x2 = bounding_box2["x"] + (bounding_box2["width"] * 0.95)
|
461
|
-
y2 = bounding_box2["y"] + bounding_box2["height"] / 2
|
462
|
-
page.mouse.click(x2, y2)
|
463
|
-
except:
|
464
|
-
sys.exit("ERROR ADJUSTING SOUND VOLUME, VIDEO SAVED AS DRAFT")
|
465
|
-
|
466
|
-
page.wait_for_selector("div.TUXButton-label:has-text('Save edit')")
|
467
|
-
page.click("div.TUXButton-label:has-text('Save edit')")
|
468
|
-
if suppressprint == False:
|
469
|
-
print("Added sound")
|
470
|
-
|
471
|
-
page.wait_for_selector('div[data-contents="true"]')
|
401
|
+
|
472
402
|
if schedule != None:
|
473
403
|
try:
|
474
404
|
hour = schedule[0:2]
|
@@ -480,25 +410,25 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
480
410
|
sys.exit("SCHEDULE TIME ERROR: PLEASE MAKE SURE YOUR SCHEDULE TIME IS A STRING THAT FOLLOWS THE 24H FORMAT 'HH:MM', VIDEO SAVED AS DRAFT")
|
481
411
|
|
482
412
|
page.locator('div.TUXRadioStandalone.TUXRadioStandalone--medium').nth(1).click()
|
483
|
-
time.sleep(0.
|
413
|
+
time.sleep(0.2)
|
484
414
|
if day != None:
|
485
415
|
page.locator('div.TUXTextInputCore-trailingIconWrapper').nth(1).click()
|
486
|
-
time.sleep(0.
|
416
|
+
time.sleep(0.2)
|
487
417
|
try:
|
488
418
|
page.locator(f'span.day.valid:has-text("{day}")').click()
|
489
419
|
except:
|
490
420
|
sys.exit("SCHEDULE DAY ERROR: ERROR WITH SCHEDULED DAY, read documentation for more information on format of day")
|
491
421
|
try:
|
422
|
+
time.sleep(1)
|
492
423
|
page.locator('div.TUXTextInputCore-trailingIconWrapper').nth(0).click()
|
493
|
-
time.sleep(0.
|
494
|
-
page.locator(f'.tiktok-timepicker-option-text:has-text("{hour}")').nth(0).scroll_into_view_if_needed()
|
495
|
-
page.locator(f'.tiktok-timepicker-option-text:has-text("{hour}")').nth(0).click()
|
496
|
-
time.sleep(0.5)
|
497
|
-
page.locator('div.TUXTextInputCore-trailingIconWrapper').nth(0).click()
|
498
|
-
time.sleep(0.5)
|
424
|
+
time.sleep(0.2)
|
499
425
|
page.locator(f'.tiktok-timepicker-option-text.tiktok-timepicker-right:has-text("{minute}")').nth(0).scroll_into_view_if_needed()
|
500
|
-
time.sleep(0.
|
426
|
+
time.sleep(0.2)
|
501
427
|
page.locator(f'.tiktok-timepicker-option-text.tiktok-timepicker-right:has-text("{minute}")').nth(0).click()
|
428
|
+
time.sleep(0.2)
|
429
|
+
page.locator(f'.tiktok-timepicker-option-text:has-text("{hour}")').nth(0).scroll_into_view_if_needed()
|
430
|
+
page.locator(f'.tiktok-timepicker-option-text:has-text("{hour}")').nth(0).click()
|
431
|
+
time.sleep(1)
|
502
432
|
|
503
433
|
if suppressprint == False:
|
504
434
|
print("Done scheduling video")
|
@@ -506,28 +436,29 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
506
436
|
except:
|
507
437
|
sys.exit("SCHEDULING ERROR: VIDEO SAVED AS DRAFT")
|
508
438
|
|
439
|
+
if (schedule == None) and (day != None):
|
440
|
+
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")
|
509
441
|
|
510
|
-
if copyrightcheck == True:
|
511
|
-
page.locator(".TUXSwitch-input").nth(0).click()
|
512
|
-
while copyrightcheck == True:
|
513
|
-
time.sleep(0.5)
|
514
|
-
if page.locator("span", has_text="No issues detected.").is_visible():
|
515
|
-
if suppressprint == False:
|
516
|
-
print("Copyright check complete")
|
517
|
-
break
|
518
|
-
if page.locator("span", has_text="Copyright issues detected.").is_visible():
|
519
|
-
sys.exit("COPYRIGHT CHECK FAILED: VIDEO SAVED AS DRAFT, COPYRIGHT AUDIO DETECTED FROM TIKTOK")
|
520
|
-
|
521
442
|
|
522
|
-
|
443
|
+
if(sound_name == None):
|
444
|
+
if copyrightcheck == True:
|
445
|
+
page.locator(".TUXSwitch-input").nth(0).click()
|
446
|
+
while copyrightcheck == True:
|
447
|
+
time.sleep(0.2)
|
448
|
+
if page.locator("span", has_text="No issues detected.").is_visible():
|
449
|
+
if suppressprint == False:
|
450
|
+
print("Copyright check complete")
|
451
|
+
break
|
452
|
+
if page.locator("span", has_text="Copyright issues detected.").is_visible():
|
453
|
+
sys.exit("COPYRIGHT CHECK FAILED: COPYRIGHT AUDIO DETECTED FROM TIKTOK")
|
454
|
+
|
523
455
|
if schedule == None:
|
524
456
|
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Post")', timeout=10000)
|
525
457
|
uploaded = False
|
526
458
|
checks = 0
|
527
459
|
while uploaded == False:
|
528
460
|
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
529
|
-
|
530
|
-
time.sleep(1)
|
461
|
+
time.sleep(0.2)
|
531
462
|
break
|
532
463
|
time.sleep(0.2)
|
533
464
|
checks += 1
|
@@ -541,7 +472,7 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
541
472
|
checks = 0
|
542
473
|
while uploaded == False:
|
543
474
|
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
544
|
-
time.sleep(
|
475
|
+
time.sleep(0.2)
|
545
476
|
break
|
546
477
|
time.sleep(0.2)
|
547
478
|
checks += 1
|
@@ -551,9 +482,148 @@ def upload_tiktok(video, description, hashtags=None, sound_name=None, sound_aud_
|
|
551
482
|
break
|
552
483
|
if suppressprint == False:
|
553
484
|
print("Done uploading video, NOTE: it may take a minute or two to show on TikTok")
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
485
|
+
|
486
|
+
page.close()
|
487
|
+
|
488
|
+
else:
|
489
|
+
try:
|
490
|
+
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--secondary:has-text("Save draft")', timeout=10000)
|
491
|
+
except:
|
492
|
+
sys.exit("SAVE AS DRAFT BUTTON NOT FOUND; CANNOT ADD SOUND WITHOUT ABILITY TO SAVE DRAFTS")
|
493
|
+
|
494
|
+
time.sleep(0.5)
|
495
|
+
page.close()
|
496
|
+
|
497
|
+
browser = p.chromium.launch(headless=True)
|
498
|
+
|
499
|
+
context = browser.new_context()
|
500
|
+
context.add_cookies(cookies)
|
501
|
+
page = context.new_page()
|
502
|
+
url2 = 'https://www.tiktok.com/tiktokstudio/content?tab=draft'
|
503
|
+
|
504
|
+
while retries < 2:
|
505
|
+
try:
|
506
|
+
page.goto(url2, timeout=30000)
|
507
|
+
except:
|
508
|
+
retries +=1
|
509
|
+
time.sleep(5)
|
510
|
+
if retries == 2:
|
511
|
+
sys.exit("ERROR: TIK TOK PAGE FAILED TO LOAD, try again.")
|
512
|
+
else:
|
513
|
+
break
|
514
|
+
|
515
|
+
try:
|
516
|
+
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']")
|
517
|
+
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']")
|
518
|
+
page.wait_for_selector('div[data-contents="true"]')
|
519
|
+
page.wait_for_function("document.querySelector('.info-progress-num').textContent.trim() === '100%'", timeout=3000000)
|
520
|
+
time.sleep(0.2)
|
521
|
+
except:
|
522
|
+
sys.exit("ERROR ADDING SOUND: Video saved as draft")
|
523
|
+
|
524
|
+
if sound_name != None:
|
525
|
+
page.click("div.TUXButton-label:has-text('Edit video')")
|
526
|
+
page.wait_for_selector("input.search-bar-input")
|
527
|
+
page.fill(f"input.search-bar-input", f"{sound_name}")
|
528
|
+
time.sleep(0.2)
|
529
|
+
page.click("div.TUXButton-label:has-text('Search')")
|
530
|
+
try:
|
531
|
+
page.wait_for_selector('div.music-card-container')
|
532
|
+
page.click("div.music-card-container")
|
533
|
+
page.wait_for_selector("div.TUXButton-label:has-text('Use')")
|
534
|
+
page.click("div.TUXButton-label:has-text('Use')")
|
535
|
+
except:
|
536
|
+
sys.exit(f"ERROR: SOUND '{sound_name}' NOT FOUND")
|
537
|
+
try:
|
538
|
+
page.wait_for_selector('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgNy41MDE2QzAgNi42NzMxNyAwLjY3MTU3MyA2LjAwMTYgMS41IDYuMDAxNkgzLjU3NzA5QzMuODY4MDUgNi4wMDE2IDQuMTQ0NTggNS44NzQ4OCA0LjMzNDU1IDUuNjU0NDlMOC43NDI1NSAwLjU0MDUyQzkuMzQ3OCAtMC4xNjE2NjggMTAuNSAwLjI2NjM3NCAxMC41IDEuMTkzNDFWMTguOTY3MkMxMC41IDE5Ljg3NDUgOS4zODg5NCAyMC4zMTI5IDguNzY5NDIgMTkuNjVMNC4zMzE3OSAxNC45MDIxQzQuMTQyNjkgMTQuNjk5OCAzLjg3ODE2IDE0LjU4NDkgMy42MDEyMiAxNC41ODQ5SDEuNUMwLjY3MTU3MyAxNC41ODQ5IDAgMTMuOTEzNCAwIDEzLjA4NDlWNy41MDE2Wk01Ljg0OTQ1IDYuOTYwMjdDNS4yNzk1NiA3LjYyMTQzIDQuNDQ5OTcgOC4wMDE2IDMuNTc3MDkgOC4wMDE2SDJWMTIuNTg0OUgzLjYwMTIyQzQuNDMyMDMgMTIuNTg0OSA1LjIyNTY0IDEyLjkyOTUgNS43OTI5NSAxMy41MzY0TDguNSAxNi40MzI4VjMuODg1MjJMNS44NDk0NSA2Ljk2MDI3WiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPHBhdGggZD0iTTEzLjUxNSA3LjE5MTE5QzEzLjM0MjQgNi45NzU1OSAxMy4zMzk5IDYuNjYwNTYgMTMuNTM1MiA2LjQ2NTNMMTQuMjQyMyA1Ljc1ODE5QzE0LjQzNzYgNS41NjI5MyAxNC43NTU4IDUuNTYxNzUgMTQuOTM1NiA1Ljc3MTM2QzE2Ljk5NTkgOC4xNzM2MiAxNi45OTU5IDExLjgyOCAxNC45MzU2IDE0LjIzMDNDMTQuNzU1OCAxNC40Mzk5IDE0LjQzNzYgMTQuNDM4NyAxNC4yNDIzIDE0LjI0MzVMMTMuNTM1MiAxMy41MzY0QzEzLjMzOTkgMTMuMzQxMSAxMy4zNDI0IDEzLjAyNjEgMTMuNTE1IDEyLjgxMDVDMTQuODEzIDExLjE4ODUgMTQuODEzIDguODEzMTIgMTMuNTE1IDcuMTkxMTlaIiBmaWxsPSIjMTYxODIzIiBmaWxsLW9wYWNpdHk9IjAuNiIvPgo8cGF0aCBkPSJNMTYuNzE3MiAxNi43MTgzQzE2LjUyMTkgMTYuNTIzMSAxNi41MjMxIDE2LjIwNzQgMTYuNzA3MiAxNi4wMDE3QzE5LjcyNTcgMTIuNjMgMTkuNzI1NyA3LjM3MTY4IDE2LjcwNzIgNC4wMDAwMUMxNi41MjMxIDMuNzk0MjcgMTYuNTIxOSAzLjQ3ODU4IDE2LjcxNzIgMy4yODMzMkwxNy40MjQzIDIuNTc2MjFDMTcuNjE5NSAyLjM4MDk1IDE3LjkzNyAyLjM4MDIgMTguMTIzMyAyLjU4NDA4QzIxLjkwOTkgNi43MjkyNiAyMS45MDk5IDEzLjI3MjQgMTguMTIzMyAxNy40MTc2QzE3LjkzNyAxNy42MjE1IDE3LjYxOTUgMTcuNjIwNyAxNy40MjQzIDE3LjQyNTVMMTYuNzE3MiAxNi43MTgzWiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPC9zdmc+Cg=="]')
|
539
|
+
page.click('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgNy41MDE2QzAgNi42NzMxNyAwLjY3MTU3MyA2LjAwMTYgMS41IDYuMDAxNkgzLjU3NzA5QzMuODY4MDUgNi4wMDE2IDQuMTQ0NTggNS44NzQ4OCA0LjMzNDU1IDUuNjU0NDlMOC43NDI1NSAwLjU0MDUyQzkuMzQ3OCAtMC4xNjE2NjggMTAuNSAwLjI2NjM3NCAxMC41IDEuMTkzNDFWMTguOTY3MkMxMC41IDE5Ljg3NDUgOS4zODg5NCAyMC4zMTI5IDguNzY5NDIgMTkuNjVMNC4zMzE3OSAxNC45MDIxQzQuMTQyNjkgMTQuNjk5OCAzLjg3ODE2IDE0LjU4NDkgMy42MDEyMiAxNC41ODQ5SDEuNUMwLjY3MTU3MyAxNC41ODQ5IDAgMTMuOTEzNCAwIDEzLjA4NDlWNy41MDE2Wk01Ljg0OTQ1IDYuOTYwMjdDNS4yNzk1NiA3LjYyMTQzIDQuNDQ5OTcgOC4wMDE2IDMuNTc3MDkgOC4wMDE2SDJWMTIuNTg0OUgzLjYwMTIyQzQuNDMyMDMgMTIuNTg0OSA1LjIyNTY0IDEyLjkyOTUgNS43OTI5NSAxMy41MzY0TDguNSAxNi40MzI4VjMuODg1MjJMNS44NDk0NSA2Ljk2MDI3WiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPHBhdGggZD0iTTEzLjUxNSA3LjE5MTE5QzEzLjM0MjQgNi45NzU1OSAxMy4zMzk5IDYuNjYwNTYgMTMuNTM1MiA2LjQ2NTNMMTQuMjQyMyA1Ljc1ODE5QzE0LjQzNzYgNS41NjI5MyAxNC43NTU4IDUuNTYxNzUgMTQuOTM1NiA1Ljc3MTM2QzE2Ljk5NTkgOC4xNzM2MiAxNi45OTU5IDExLjgyOCAxNC45MzU2IDE0LjIzMDNDMTQuNzU1OCAxNC40Mzk5IDE0LjQzNzYgMTQuNDM4NyAxNC4yNDIzIDE0LjI0MzVMMTMuNTM1MiAxMy41MzY0QzEzLjMzOTkgMTMuMzQxMSAxMy4zNDI0IDEzLjAyNjEgMTMuNTE1IDEyLjgxMDVDMTQuODEzIDExLjE4ODUgMTQuODEzIDguODEzMTIgMTMuNTE1IDcuMTkxMTlaIiBmaWxsPSIjMTYxODIzIiBmaWxsLW9wYWNpdHk9IjAuNiIvPgo8cGF0aCBkPSJNMTYuNzE3MiAxNi43MTgzQzE2LjUyMTkgMTYuNTIzMSAxNi41MjMxIDE2LjIwNzQgMTYuNzA3MiAxNi4wMDE3QzE5LjcyNTcgMTIuNjMgMTkuNzI1NyA3LjM3MTY4IDE2LjcwNzIgNC4wMDAwMUMxNi41MjMxIDMuNzk0MjcgMTYuNTIxOSAzLjQ3ODU4IDE2LjcxNzIgMy4yODMzMkwxNy40MjQzIDIuNTc2MjFDMTcuNjE5NSAyLjM4MDk1IDE3LjkzNyAyLjM4MDIgMTguMTIzMyAyLjU4NDA4QzIxLjkwOTkgNi43MjkyNiAyMS45MDk5IDEzLjI3MjQgMTguMTIzMyAxNy40MTc2QzE3LjkzNyAxNy42MjE1IDE3LjYxOTUgMTcuNjIwNyAxNy40MjQzIDE3LjQyNTVMMTYuNzE3MiAxNi43MTgzWiIgZmlsbD0iIzE2MTgyMyIgZmlsbC1vcGFjaXR5PSIwLjYiLz4KPC9zdmc+Cg=="]')
|
540
|
+
time.sleep(0.5)
|
541
|
+
sliders = page.locator("input.scaleInput")
|
542
|
+
|
543
|
+
if sound_aud_vol == 'background':
|
544
|
+
slider1 = sliders.nth(0)
|
545
|
+
bounding_box1 = slider1.bounding_box()
|
546
|
+
if bounding_box1:
|
547
|
+
x1 = bounding_box1["x"] + (bounding_box1["width"] * 0.92)
|
548
|
+
y1 = bounding_box1["y"] + bounding_box1["height"] / 2
|
549
|
+
page.mouse.click(x1, y1)
|
550
|
+
|
551
|
+
slider2 = sliders.nth(1)
|
552
|
+
bounding_box2 = slider2.bounding_box()
|
553
|
+
if bounding_box2:
|
554
|
+
x2 = bounding_box2["x"] + (bounding_box2["width"] * 0.097)
|
555
|
+
y2 = bounding_box2["y"] + bounding_box2["height"] / 2
|
556
|
+
page.mouse.click(x2, y2)
|
557
|
+
|
558
|
+
if sound_aud_vol == 'main':
|
559
|
+
slider1 = sliders.nth(0)
|
560
|
+
bounding_box1 = slider1.bounding_box()
|
561
|
+
if bounding_box1:
|
562
|
+
x1 = bounding_box1["x"] + (bounding_box1["width"] * 0.092)
|
563
|
+
y1 = bounding_box1["y"] + bounding_box1["height"] / 2
|
564
|
+
page.mouse.click(x1, y1)
|
565
|
+
slider2 = sliders.nth(1)
|
566
|
+
bounding_box2 = slider2.bounding_box()
|
567
|
+
if bounding_box2:
|
568
|
+
x2 = bounding_box2["x"] + (bounding_box2["width"] * 0.92)
|
569
|
+
y2 = bounding_box2["y"] + bounding_box2["height"] / 2
|
570
|
+
page.mouse.click(x2, y2)
|
571
|
+
except:
|
572
|
+
sys.exit("ERROR ADJUSTING SOUND VOLUME: please try again.")
|
573
|
+
|
574
|
+
page.wait_for_selector("div.TUXButton-label:has-text('Save edit')")
|
575
|
+
page.click("div.TUXButton-label:has-text('Save edit')")
|
576
|
+
if suppressprint == False:
|
577
|
+
print("Added sound")
|
578
|
+
|
579
|
+
page.wait_for_selector('div[data-contents="true"]')
|
580
|
+
|
581
|
+
if copyrightcheck == True:
|
582
|
+
page.locator(".TUXSwitch-input").nth(0).click()
|
583
|
+
while copyrightcheck == True:
|
584
|
+
time.sleep(0.2)
|
585
|
+
if page.locator("span", has_text="No issues detected.").is_visible():
|
586
|
+
if suppressprint == False:
|
587
|
+
print("Copyright check complete")
|
588
|
+
break
|
589
|
+
if page.locator("span", has_text="Copyright issues detected.").is_visible():
|
590
|
+
sys.exit("COPYRIGHT CHECK FAILED: VIDEO SAVED AS DRAFT, COPYRIGHT AUDIO DETECTED FROM TIKTOK")
|
591
|
+
|
592
|
+
|
593
|
+
try:
|
594
|
+
if schedule == None:
|
595
|
+
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Post")', timeout=10000)
|
596
|
+
uploaded = False
|
597
|
+
checks = 0
|
598
|
+
while uploaded == False:
|
599
|
+
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
600
|
+
time.sleep(0.2)
|
601
|
+
break
|
602
|
+
time.sleep(0.2)
|
603
|
+
checks += 1
|
604
|
+
if checks > 100:
|
605
|
+
time.sleep(10)
|
606
|
+
if checks == 150:
|
607
|
+
break
|
608
|
+
else:
|
609
|
+
page.click('button.TUXButton.TUXButton--default.TUXButton--large.TUXButton--primary:has-text("Schedule")', timeout=10000)
|
610
|
+
uploaded = False
|
611
|
+
checks = 0
|
612
|
+
while uploaded == False:
|
613
|
+
if page.locator(':has-text("Leaving the page does not interrupt")').nth(0).is_visible():
|
614
|
+
time.sleep(0.2)
|
615
|
+
break
|
616
|
+
time.sleep(0.2)
|
617
|
+
checks += 1
|
618
|
+
if checks > 100:
|
619
|
+
time.sleep(10)
|
620
|
+
if checks == 150:
|
621
|
+
break
|
622
|
+
if suppressprint == False:
|
623
|
+
print("Done uploading video, NOTE: it may take a minute or two to show on TikTok")
|
624
|
+
except:
|
625
|
+
time.sleep(5)
|
626
|
+
sys.exit("ERROR UPLOADING: VIDEO HAS SAVED AS DRAFT BUT CANT UPLOAD")
|
627
|
+
time.sleep(1)
|
558
628
|
|
559
|
-
|
629
|
+
page.close()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: tiktokautouploader
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.8
|
4
4
|
Summary: Upload or schedule videos to TikTok with TikTok sounds and hashtags that work.
|
5
5
|
Project-URL: Homepage, https://github.com/haziq-exe/TikTokAutoUploader
|
6
6
|
Author-email: HAZIQ KHALID <haziqmk123@gmail.com>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
tiktokautouploader/__init__.py,sha256=u7OWCK_u68ST8dfrkSF4Yw44CJOzV9NXI6ASRuoDfmE,64
|
2
|
+
tiktokautouploader/function.py,sha256=YWecvSMwVJD_Io4btPGiew9piv-1B6Df1tWxlkGTq4Y,31544
|
3
|
+
tiktokautouploader/Js_assets/login.js,sha256=SLhtPYo8ZfTRUnbR7Xqp084lSuAOqIWUxi75FlFH3vs,966
|
4
|
+
tiktokautouploader-2.8.dist-info/METADATA,sha256=M_ZqzppVuuuqUGmevmCPxEAbjJvhO2A-wncP01KQ0Aw,816
|
5
|
+
tiktokautouploader-2.8.dist-info/WHEEL,sha256=fl6v0VwpzfGBVsGtkAkhILUlJxROXbA3HvRL6Fe3140,105
|
6
|
+
tiktokautouploader-2.8.dist-info/licenses/LICENSE.md,sha256=hYds_VJIpnS5gC73WhuWk2IY_e9BWjuEJthQCb9ThyU,1073
|
7
|
+
tiktokautouploader-2.8.dist-info/RECORD,,
|
@@ -1,7 +0,0 @@
|
|
1
|
-
tiktokautouploader/__init__.py,sha256=u7OWCK_u68ST8dfrkSF4Yw44CJOzV9NXI6ASRuoDfmE,64
|
2
|
-
tiktokautouploader/function.py,sha256=3S18jcePZCEDSQ2RQNs27Z3Xbp3QW9vyu1aNtbSAHsE,28340
|
3
|
-
tiktokautouploader/Js_assets/login.js,sha256=Qk_zUzRPeIN0ZnQVDtzahDNqIUJbIBbKoKw8GWW6et4,1318
|
4
|
-
tiktokautouploader-2.7.dist-info/METADATA,sha256=dQtuZ0yRpDNo1X_X6tjm2iNyCPmF7pRNQXZH1YgS1gs,816
|
5
|
-
tiktokautouploader-2.7.dist-info/WHEEL,sha256=fl6v0VwpzfGBVsGtkAkhILUlJxROXbA3HvRL6Fe3140,105
|
6
|
-
tiktokautouploader-2.7.dist-info/licenses/LICENSE.md,sha256=hYds_VJIpnS5gC73WhuWk2IY_e9BWjuEJthQCb9ThyU,1073
|
7
|
-
tiktokautouploader-2.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|