YouTube Engagement Panel Text Extractor

提取并复制 ytd-engagement-panel-section-list-renderer 标签下的文本

当前为 2024-12-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name YouTube Engagement Panel Text Extractor
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description 提取并复制 ytd-engagement-panel-section-list-renderer 标签下的文本
  6. // @author 微信:civilpy
  7. // @match https://www.youtube.com/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. // 创建一个容器来保持两个按钮在一起
  15. const buttonContainer = document.createElement('div');
  16. buttonContainer.style.position = 'fixed';
  17. buttonContainer.style.top = '50%'; // 设置为页面高度的50%
  18. buttonContainer.style.right = '10px'; // 距离右侧10像素
  19. buttonContainer.style.transform = 'translateY(-50%)'; // 垂直居中对齐
  20. buttonContainer.style.display = 'flex';
  21. buttonContainer.style.flexDirection = 'column';
  22. buttonContainer.style.alignItems = 'flex-end'; // 将子元素靠右对齐
  23.  
  24. // 创建两个按钮
  25. const button1 = document.createElement('button');
  26. button1.innerText = '提取文字';
  27. button1.style.marginBottom = '10px'; // 给两个按钮之间添加一些间距
  28. const button2 = document.createElement('button');
  29. button2.innerText = '复制文字';
  30. button2.disabled = true; // 初始状态下禁用复制按钮
  31.  
  32. // 添加到容器
  33. buttonContainer.appendChild(button1);
  34. buttonContainer.appendChild(button2);
  35.  
  36. // 添加到页面
  37. document.body.appendChild(buttonContainer);
  38.  
  39. let extractedText = '';
  40.  
  41. // 按钮1点击事件 - 提取文字
  42. button1.addEventListener('click', () => {
  43. // 查找所有ytd-engagement-panel-section-list-renderer元素并提取其文本内容
  44. const elements = document.querySelectorAll('ytd-engagement-panel-section-list-renderer');
  45. // 提取文本并去除前后空白,过滤掉空行或仅有空白字符的行
  46. extractedText = Array.from(elements)
  47. .map(el => el.textContent.trim())
  48. .filter(line => line.length > 0) // 过滤掉空行
  49. .join('\n');
  50.  
  51. console.log('已提取的文字:', extractedText); // 输出到控制台供调试
  52.  
  53. // 启用复制按钮
  54. button2.disabled = false;
  55. });
  56.  
  57. // 按钮2点击事件 - 复制文字
  58. button2.addEventListener('click', () => {
  59. if (extractedText) {
  60. navigator.clipboard.writeText("分析总结以下文本:\n"+extractedText).then(() => {
  61. console.log('文本已复制到剪贴板');
  62. alert('文本已复制到剪贴板');
  63. }).catch(err => {
  64. console.error('无法复制文本: ', err);
  65. });
  66. }
  67. });
  68. })();