无法 find/use Twitter 媒体按钮的正确 xpath,为什么?

Could not find/use the right xpath of the Twitter Media button, why?

我正在创建一个 Python 脚本(使用 selenium),它会自动 posts textsmedia(images)

脚本在 posting texts 时成功运行,但在尝试 post 图像时失败。错误只是说

" Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div"...

我使用以下代码单击 Twitter 媒体按钮,打开我的 Windows 资源管理器,准备进入我的图像文件夹(另请参见图像中突出显示的媒体按钮)。

driver.find_element(by.XPATH, image_xpath).click()
time.sleep(2)

driver.find_element(by.XPATH, image_xpath).send_keys(image)

上传一个 image,如果你有一个 input tag 属性 type 作为 file

您可以直接使用send_keys上传图片。

time.sleep(2)
driver.find_element(by.XPATH, image_xpath).send_keys("full file path of image")

我建议诱导 ExplicitWait

wait = WebDriverWait(driver, 30)
wait.until(EC.visibility_of_element_located((By.XPATH, "image_xpath"))).send_keys("full file path of image")

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

请注意,您不应单击按钮来打开 windows 弹出窗口。上传图片后,直接发送密钥。

twitter 中有一个用于上传文件的输入标签。您可以使用该定位器上传文件。

下面的代码可以发送图片:

环境:

Python3.9.5

OS: Windows

 URL = "https://twitter.com/login"

driver.get(URL)
driver.maximize_window()
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.NAME, "text"))).send_keys("your username")
driver.find_element(By.XPATH, '(//*[@role="button"]//following::span[contains(.,"Next")])[2]').click()
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.NAME, "password"))).send_keys("your passowrd")
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[@data-testid='LoginForm_Login_Button']"))).click()
sleep(5)

imagePath = driver.find_element(By.XPATH, "//*[@data-testid='fileInput']")

imagePath.send_keys("C:\Users\username\Documents\Personal\selenium.png")

tweetButton = driver.find_element(By.XPATH, "//*[@data-testid='tweetButtonInline']")

tweetButton.click()

输出:

输入文件标签: