【问题标题】:How to click on like/dislike button of YouTube video using selenium webdriver python?如何使用 selenium webdriver python 点击​​ YouTube 视频的喜欢/不喜欢按钮?
【发布时间】:2021-05-09 22:30:03
【问题描述】:

我的代码:

react_on_video = (input("React: ")).upper()
video_link = "https://www.youtube.com/watch?v=blablabla"

(After login with my gmail account)

driver.get(video_link)
driver.execute_script("window.scrollTo(0, 300);")
time.sleep(1)
if react_on_video == "LIKE":
    Like_button_Full_xpath = "/html/body/ytd-app/div/ytd-page-manager/ytd-watch- 
          flexy/div[5]/div[1]/div/div[8]/div[2]/ytd-video-primary-info- 
          renderer/div/div/div[3]/div/ytd-menu-renderer/div[1]/ytd-toggle-button-renderer[1]/a/yt- 
          icon-button/button/yt-icon"
    driver.find_element_by_xpath(Like_button_Full_xpath).click()
    
if react_on_video == "DISLIKE":
    Dislike_button_Full_xpath = "/html/body/ytd-app/div/ytd-page-manager/ytd-watch- 
          flexy/div[5]/div[1]/div/div[8]/div[2]/ytd-video-primary-info- 
          renderer/div/div/div[3]/div/ytd-menu-renderer/div[1]/ytd-toggle-button-renderer[2]/a/yt- 
          icon-button/button/yt-icon"
    driver.find_element_by_xpath(Dislike_button_Full_xpath).click()

但是每次都显示No such element exception! [selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:] 我尝试过使用其他选择器和 xpath;但他们都没有工作!有什么永久的解决办法吗?因为一旦我能够点击这个 xpath 的按钮。我不得不多次更改 xpath。 Like_button_xpath : '//[@id="top-level-buttons"]/ytd-toggle-button-renderer1/a'
Dislike_button_xpath : '//
[@id="top-level-buttons"]/ytd-toggle-button-renderer[2]/a'

【问题讨论】:

  • 使用完整的 xpath 是一种非常不稳定的识别元素的方法。如果您可以共享页面的完整 HTML,我/我们可能会帮助您编写一个独特且可靠的选择器来识别您想要的元素。
  • 你能分享一些 HTML 或截图吗?
  • 我添加了截图!
  • 非常感谢您的回答和意见!这个 CSS 选择器不是唯一的并且不起作用!您可以自己查看完整的 HTML。只需在浏览器上打开 youtube,然后单击视频!然后检查like按钮。
  • 也许谷歌阻止按钮就像在 chromedriver 中一样。我尝试了很多方法,但不再工作了

标签: python selenium web webdriver


【解决方案1】:

我找到了解决方案。试试 xPath

Like_button_Full_xpath = "//div[3]/div/ytd-menu-renderer/div/ytd-toggle-button-renderer/a/yt-icon-button/button/yt-icon"

告诉我它是否有效。

【讨论】:

  • 为我工作。
【解决方案2】:

我不会使用 xpath,而是使用 css 选择器。如果没有看到完整的 HTML,我不能保证这个选择器是唯一的,但我会尝试像这样找到“喜欢”按钮:

driver.find_element_by_css_selector('yt-icon.style-scope.ytd-toggle-button-renderer')

【讨论】:

  • 但我还要告诉你一件事!我已经尝试过所有其他选择器和 Xpath。但在这种情况下,它们都不起作用。我猜 YouTube 正在阻止 webdriver 找出喜欢、不喜欢和订阅的元素。因为每次它都显示 No such element 异常。但其他元素工作正常。可能吗?如果可能的话,你认为我能做什么?有硒的替代品吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 2012-01-14
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
相关资源
最近更新 更多