pythonseleniumselenium-webdriverwebdriverwaittiktok

Tiktok: Selenium unable to find upload area


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.


Solution

  • 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")