Селен не смог найти элемент по XPath - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь найти элемент, используя 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

Есть идеи, почему?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать намного более простой относительный 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")
    
0 голосов
/ 09 ноября 2018

Попробуйте это,

Относительный путь - //yt-formatted-string[@id='owner-name']//a[contains(text(),'CrashCourse')]

Это сработало для меня, надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...