As the title suggests, my bot is unable to find the upload area on the tiktok website.
driver.get("https://www.tiktok.com/upload/")
time.sleep(5)
upld = driver.find_element(By.XPATH, "//*[@id='root']/div/div/div/div/div[2]/div[1]/div/div/div[4]/button")
upld.send_keys(r"C:\Users\Marius\final.mp4")
The error I am getting while running the code is:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='root']/div/div/div/div/div[2]/div[1]/div/div/div[4]/button"}
(Session info: chrome=103.0.5060.134)
Stacktrace:
Backtrace:
Ordinal0 [0x01155FD3+2187219]
Ordinal0 [0x010EE6D1+1763025]
Ordinal0 [0x01003E78+802424]
Ordinal0 [0x01031C10+990224]
Ordinal0 [0x01031EAB+990891]
Ordinal0 [0x0105EC92+1174674]
Ordinal0 [0x0104CBD4+1100756]
Ordinal0 [0x0105CFC2+1167298]
Ordinal0 [0x0104C9A6+1100198]
Ordinal0 [0x01026F80+946048]
Ordinal0 [0x01027E76+949878]
GetHandleVerifier [0x013F90C2+2721218]
GetHandleVerifier [0x013EAAF0+2662384]
GetHandleVerifier [0x011E137A+526458]
GetHandleVerifier [0x011E0416+522518]
Ordinal0 [0x010F4EAB+1789611]
Ordinal0 [0x010F97A8+1808296]
Ordinal0 [0x010F9895+1808533]
Ordinal0 [0x011026C1+1844929]
BaseThreadInitThunk [0x7615FA29+25]
RtlGetAppContainerNamedObjectPath [0x77847A9E+286]
RtlGetAppContainerNamedObjectPath [0x77847A6E+238]
I've tried running the bot on my other device and it worked with no flaws, but it doesnt seem to work when I try it with selenium for some reason. The chrome version is the same on all devices and on selenium as well.
I've tried css-selector and class find methods, but they still return no result.
Any help is appreciated.
As the locator strategies worked on your other device presumably the locator is flawless but ideally to send a character sequence to the element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following locator strategies:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='root']/div/div/div/div/div[2]/div[1]/div/div/div[4]/button"))).send_keys("C:\Users\Marius\final.mp4")
Note: You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC