0

我正在写一个谷歌浏览器扩展。我不知道 JavaScript,我正在尝试确定“不喜欢”按钮是否处于活动状态(表示蓝色,因为它在某个时候被我点击过,因此标志着我不喜欢视频)元素YouTube 视频页面。

我尝试了各种方法,但我没有希望。我的一些尝试:

//result = document.querySelector("path[d]");
    //var something = document.querySelector('[d=M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v1.91l.01.01L1 14c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z" class="style-scope yt-icon]');

有人可以帮助我吗?有趣的是,我只在检查页面时才发现这个属性,如果我查看页面源,它​​甚至不会出现在页面中(我没有 Web 开发知识,我怀疑这是一些动态技巧?)。

编辑:我在我的 chrome 扩展后台脚本的开头使用以下内容来确保页面已加载:

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {  

if (changeInfo.status == 'complete') {
    if (tab.url.indexOf("youtube.com") != -1) {
4

2 回答 2

1

只要 YouTube 不改变任何东西,您就可以利用元素的aria-label属性。 您要查找的内容以“不喜欢”开头(“不喜欢该视频以及其他 89 个人”- 数量可能会有所不同,其余的 - 可能不会)。 尝试这个:button

for(var btn of document.getElementsByTagName("button"))
  if(btn.getAttribute("aria-label"))
    if(btn.getAttribute("aria-label").includes("dislike"))
      console.log(btn);

而不是console.log(btn)你可以使用btn.click().

于 2020-07-18T19:47:22.880 回答
0

尝试这个:

var dislikeButtonElement = document.querySelector("#top-level-buttons > ytd-toggle-button-renderer").nextElementSibling;
if(dislikeButtonElement.classList.contains("style-default-active")){
    //Dislike button active
    alert("Disliked Video");
}

请注意,这仅在页面完全加载后才有效,因为 YouTube 会动态加载几乎所有内容。在较慢的连接上,视频可能在这些按钮加载之前播放

于 2020-07-18T18:26:58.200 回答