Skip to content

使用Chrome控制台,先允许粘贴,手动把所有评论加载出来,然后使用下列代码,手动复制结果就好

(() => {
  // 选择评论的DOM元素,YouTube评论每条一般在 #contents 下的 ytd-comment-thread-renderer
  const commentElements = document.querySelectorAll('#contents ytd-comment-thread-renderer #content-text');
  
  let comments = [];
  commentElements.forEach(el => {
    comments.push(el.innerText.trim());
  });
  
  // 将评论用换行符连接成一个字符串
  const commentText = comments.join('\n\n----------\n\n');
  
  // 打印输出,可以Ctrl+C复制
  console.log(commentText);
  
  // 另外,可以创建下载链接便于直接保存TXT
  const blob = new Blob([commentText], { type: 'text/plain' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'youtube_comments.txt';
  a.textContent = '点击这里下载评论文本文件';
  document.body.appendChild(a);
})();

如果你想展开回复,可以先执行下面的代码。该代码会2s检查一下有没有回复,然后点击。

(() => {
  function expandAllReplies() {
    // 选取所有展开回复的按钮,涵盖 "more-replies" 以及页面上所有带有"reply/replies/回复"关键词的按钮
    const buttons = Array.from(document.querySelectorAll('ytd-button-renderer#more-replies button'));

    let clickedCount = 0;
    buttons.forEach(btn => {
      const label = btn.getAttribute('aria-label') || btn.innerText || '';
      if (/reply|replies|回复/i.test(label.trim())) {
        btn.click();
        clickedCount++;
        console.log(`点击展开回复按钮: ${label.trim()}`);
      }
    });

    if (clickedCount > 0) {
      console.log(`本轮共点击展开 ${clickedCount} 个回复,2秒后继续检测...`);
      setTimeout(expandAllReplies, 2000); // 递归延迟2秒继续
    } else {
      console.log('所有回复已展开完毕,无更多按钮可点击。');
    }
  }

  expandAllReplies();
})();

如果你认为上述代码影响你其他的操作,你可以全部加载后使用一次下面的代码展开回复


(() => {
  // 选取当前页面所有“展开回复”按钮(数量不限),在对应的more-replies按钮内的<button>元素
  const buttons = Array.from(document.querySelectorAll('ytd-button-renderer#more-replies button'));

  let clickedCount = 0;
  buttons.forEach(btn => {
    const label = btn.getAttribute('aria-label') || btn.innerText || '';
    if (/reply|replies|回复/i.test(label.trim())) {
      btn.click();
      clickedCount++;
      console.log(`点击展开回复按钮: ${label.trim()}`);
    }
  });

  if (clickedCount === 0) {
    console.log('当前没有找到可点击的展开回复按钮');
  } else {
    console.log(`共点击展开 ${clickedCount} 个回复按钮`);
  }
})();