Selenium 无法通过 XPath 定位元素

Selenium Could Not Locate Element by XPath

我正在尝试使用 Xpath 和 Selenium 定位元素。

相关元素是 YouTube 页面上的频道名称:https://www.youtube.com/watch?v=FSyAehMdpyI&list=PL8dPuuaLjXtPHzzYuWy6fYEaX9mQQ8oGr

我的 xpath 是:

/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[3]/div[1]/div/div[7]/div[3]/ytd-video-secondary-info-renderer/div/div[2]/ytd-video-owner-renderer/div[1]/div/yt-formatted-string/a

在 YouTube 页面的开发者工具栏中,我可以通过输入 Xpath 找到该元素。但是当我试图在我的 Python 脚本中找到它时,操作超时。

channel_name = self.wait.until(EC.presence_of_element_located((By.XPATH,"/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[3]/div[1]/div/div[7]/div[3]/ytd-video-secondary-info-renderer/div/div[2]/ytd-video-owner-renderer/div[1]/div/yt-formatted-string/a"))).text

知道为什么吗?

试试这个,

相对路径 - //yt-formatted-string[@id='owner-name']//a[contains(text(),'CrashCourse')]

对我有用,希望对你有帮助!

您可以使用更简单的相对 xpath 来提取 频道名称 visibility_of_element_located() 方法,您可以使用以下任一解决方案:

  • 使用text:

    channel_name = self.wait.until(EC.visibility_of_element_located((By.XPATH,"//div[@id='owner-container']/yt-formatted-string[@id='owner-name']/a"))).text
    
  • 使用get_attribute():

    channel_name = self.wait.until(EC.visibility_of_element_located((By.XPATH,"//div[@id='owner-container']/yt-formatted-string[@id='owner-name']/a"))).get_attribute("innerHTML")