🏠 Home 

Youtube自动选择中文翻译字幕

Youtube自动点击中文翻译字幕


安装此脚本?
  1. // ==UserScript==
  2. // @name Youtube自动选择中文翻译字幕
  3. // @namespace http://tampermonkey.net/
  4. // @version 4.8
  5. // @description Youtube自动点击中文翻译字幕
  6. // @author 大奶瓜
  7. // @match https://www.youtube.com/*
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @license MIT
  11. // ==/UserScript==
  12. (() => {
  13. const lcc_log = log => { console.log(`%clcc_log--->`, "color: #66b2ff; font-style: italic; background-color: #001e3c ;padding: 5px 10px;font-size:20px;border-radius:10px"); console.log(log) };
  14. const $ = el => document.querySelector(el)
  15. const $$ = el => document.querySelectorAll(el)
  16. const translate = () => {
  17. const trans_flag = GM_getValue("trans_flag", true)
  18. // 设置菜单按钮点击器
  19. const clickActive = (clickBtn, role = "menuitemradio",) => {
  20. for (const node of $$(`[role=${role}]`)) {
  21. if (node.innerText.trim().includes(clickBtn)) {
  22. node.click()
  23. return
  24. }
  25. }
  26. }
  27. const ###tnT = $('.ytp-subtitles-button[aria-pressed="true"]')
  28. const ###tnF = $('.ytp-subtitles-button[aria-pressed="false"]')
  29. const noSub = $('.ytp-subtitles-button[aria-pressed="false"][title="无法显示字幕"]')
  30. if (noSub !== null) return
  31. if (###tnT === null && ###tnF === null) return
  32. // 字幕按钮
  33. if (###tnF) ###tnF.click()
  34. if (!trans_flag) return
  35. // 设置按钮
  36. $('.ytp-settings-button').click()
  37. // 设置菜单按钮
  38. clickActive("字幕", "menuitem")
  39. clickActive("中文(简体)")
  40. clickActive("中文(##)")
  41. clickActive("自动翻译")
  42. clickActive("中文(简体)")
  43. }
  44. // 创建一个循环定时器
  45. const trans_interval = setInterval(() => {
  46. // 一直循环,一直到找到video元素为止,然后把事件添加上去
  47. const videoNode = $('video')
  48. if (videoNode) {
  49. clearInterval(trans_interval)
  50. translate()
  51. videoNode.addEventListener('loadeddata', translate, false)
  52. }
  53. }, 500)
  54. // 创建一个循环定时器
  55. const btn_interval = setInterval(() => {
  56. const menu_container = $("#menu-container")
  57. if (menu_container) {
  58. clearInterval(btn_interval)
  59. const trans_flag = GM_getValue("trans_flag", true)
  60. const change_trans = document.createElement('div')
  61. const change_input = document.createElement('input')
  62. const change_lable = document.createElement('lable')
  63. change_lable.style.color = "var(--yt-button-icon-button-text-color,var(--yt-spec-text-secondary))";
  64. change_lable.style.fontSize = "var(--ytd-tab-system_-_font-size)";
  65. Object.assign(change_trans.style, { display: "flex", paddingRight: "8px" })
  66. change_trans.id = "change_trans"
  67. change_input.type = "checkbox"
  68. if (trans_flag) {
  69. change_input.checked = true
  70. change_lable.innerHTML = "翻译开启"
  71. } else {
  72. change_input.checked = false
  73. change_lable.innerHTML = "翻译关闭"
  74. }
  75. change_trans.onclick = e => {
  76. const trans_flag = GM_getValue("trans_flag", true)
  77. if (trans_flag != change_input.checked) {
  78. GM_setValue("trans_flag", change_input.checked)
  79. if (!trans_flag) {
  80. change_input.checked = true
  81. change_lable.innerHTML = "翻译开启"
  82. } else {
  83. change_input.checked = false
  84. change_lable.innerHTML = "翻译关闭"
  85. }
  86. window.location.reload()
  87. //if(confirm("是否更新当前视频的翻译状态?\n点击确定:当前网页会刷新,当前视频翻译状态会切换\n点击取消:不会刷新,翻译状态从下一个视频生效")) window.location.reload()
  88. }
  89. }
  90. change_trans.appendChild(change_input)
  91. change_trans.appendChild(change_lable)
  92. menu_container.parentNode.insertBefore(change_trans, menu_container)
  93. }
  94. }, 1000)
  95. })()