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")
我正在尝试使用 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")