Tiktok:Selenium无法找到上传区域

ujv3wf0j  于 2023-02-12  发布在  其他
关注(0)|答案(3)|浏览(102)

正如标题所示,我的机器人无法在tiktok网站上找到upload area

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

我在运行代码时得到的错误是:

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]

我试过在我的其他设备上运行这个机器人,它运行起来没有任何缺陷,但当我尝试在 selenium 上运行时,由于某种原因,它似乎不起作用。 chrome 版本在所有设备上都是一样的,在 selenium 上也是一样。
我试过css-selector和class find方法,但它们仍然没有返回结果。
任何帮助都很感激。

y3bcpkx1

y3bcpkx11#

试试这个:

# There is an iframe on the page...
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe')
driver.switch_to.frame(iframe)

# Wait until page loads...
time.sleep(3)

# Select the input file and send the filename...
upload = driver.find_element(By.CSS_SELECTOR, 'input[type="file"]')
video_path = 'C:/Users/my_video.mp4'
upload.send_keys(video_path)
gt0wga4j

gt0wga4j2#

因为你要查找的内容在IFrame中,所以Selenium XPath搜索与Google Chrome的开发工具XPath搜索不同,不会进入IFrame。因此,你所需要做的就是切换IFrame,代码应该按预期工作。

iframe = driver.find_element(By.CSS_SELECTOR, 'iframe')
driver.switch_to.frame(iframe)

注意:WebDriverWait将不执行任何操作来修复此问题,因为此页已完全加载。

ulmd4ohb

ulmd4ohb3#

由于locator strategies在您的其他设备上工作,因此定位器可能是完美的,但理想情况下,要向元素发送 * 字符序列 *,您需要为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下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")
      • 注意**:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

相关问题