按内容匹配元素在控制台中工作,在“现实生活中”失败

Matching elements by contents works in console, fails "in real life"

本文关键字:生活 现实生活中 失败 工作 元素 控制台      更新时间:2023-09-26

我想隐藏YouTube上已知不良频道的视频结果。这应该不是很有挑战性。视频项目主要有两种span变体:搜索视频时较大的.result-item,相关视频列的.video-list-item较小。两者都在其内部.yt-user-name元素中列出了频道所有者。

通过对Chrome 20的开发人员控制台进行一些清理,我发现以下内容可以按预期工作:

  1. 从任何有搜索结果的页面开始,注入jQuery
  2. 选择第一个搜索结果,a = $(".video-list-item, .result-item")[0]
  3. 提取用户名并将其转换为小写,并带有$(a).find(".yt-user-name").text().toLowerCase()

因此,我尝试了以下方法:

badChannels = ["vaivecorporation"] #fill in as desired
$(jQuery.grep($(".video-list-item, .result-item"),
  function(item, number){
    username = $(item).find(".yt-username").text().toLowerCase();
    console.debug(username);
    return badChannels.indexOf(username) != -1;
  })).css('opacity', 0.1);

尽管有大量的 jQuery,它是完美的并且可以做所有事情,但注入最新的 jQuery 和上面的内容只是给了我 24 个换行符。

我做错了什么?

快速浏览页面源代码,看起来您需要yt-user-name,而不是yt-username