Greasy Fork 支持简体中文。

【自用】Youtube自动英文字幕

自动切换到英文字幕

目前為 2021-10-23 提交的版本,檢視 最新版本

// ==UserScript==
// @icon        https://github.com/favicon.ico
// @name        【自用】Youtube自动英文字幕
// @namespace   heckles
// @match       https://www.youtube.com/*
// @grant       none
// @version     v2021.10.23
// @author      heckles
// @description 自动切换到英文字幕
// ==/UserScript==
markcontainer = document.createElement("div");
document.body.appendChild(markcontainer);
markcontainer.setAttribute("id", "markcontainer");


if (document.getElementById("browser-app") || document.getElementById("masthead")) { //这两个元素,有一个是true,就往下执行
    var sx = setInterval(function () { //间隔执行
        if (window.location.href.indexOf("watch?v=") < 0) { //如果网址不匹配
            return false; //就不执行         【这里只能匹配域名,然后筛,直接用watch的网址,从首页点进去会不触发】
        } else {
            if (document.querySelector("div.html5-video-container video.video-stream.html5-main-video").src == document.getElementById("markcontainer").innerHTML) {//如果blob没变(每点一次哪怕重复点击视频,blob都会变)
                return false; //就不执行
            } else {
                if (!document.querySelector("div.html5-video-container video.video-stream.html5-main-video") || !document.querySelector("div#text-container #text") || !document.querySelector(".ytp-settings-button")) {//如果video、频道名、设置按钮有一个找不到,即还没加载
                    return false; //就不执行
                } else {
                    StartSub(); //执行函数
                }
            }
        }
    }, 1000); //间隔时间,毫秒
    //return;
}

function StartSub() {
    if (document.querySelector("button.ytp-subtitles-button.ytp-button").style.display != "none") { //如果有字幕(通过字幕按钮是否显示来判断)
        document.querySelector(".ytp-settings-button").click();//点击设置按钮
        document.querySelector(".ytp-menuitem-label-count").click();//点击字幕按钮
        if (document.querySelector("#ytp-id-17").innerHTML.indexOf("英语") > -1) {//如果有英语字幕
            var caps = document.querySelectorAll(".ytp-popup.ytp-settings-menu .ytp-menuitem-label");
            //加ID好在后面判断,别再遍历时判断
            for (i = 0; i < caps.length; i++) {
                if (caps[i].innerHTML.indexOf("英语") == 0 && caps[i].innerHTML.indexOf("自动") == -1) { //不知道为啥必须有两个=才行,英语不含自动
                    caps[i].setAttribute("id", "EngSub");
                }
                if (caps[i].innerHTML.indexOf("英语") == 0 && caps[i].innerHTML.indexOf("自动") > -1) { //不知道为啥必须有两个=才行,英语含自动
                    caps[i].setAttribute("id", "EngSubAuto");
                }
                if (caps[i].innerHTML.indexOf("关闭") == 0) { //把关闭也标记一下
                    caps[i].setAttribute("id", "closeSub");
                }
            }
            //开始判断,有英语字幕选之
            if(document.querySelector("#columns  #text-container #text a").innerHTML.match(/[\u4e00-\u9fa5]/gi) === null){//频道名不含中文
              console.log("英文频道(名)" + document.querySelector("#columns  #text-container #text a").innerHTML);
                if (document.getElementById("EngSub")) {
                  document.getElementById("EngSub").click();
                } else { //否则选择英语(自动生成)
                  document.getElementById("EngSubAuto").click();
                }             
            }else{//频道名含中文
              document.getElementById("closeSub").click();
              console.log("含中文频道(名)" + document.querySelector("#meta #text-container #text a").innerHTML);
            }
        }
        markcontainer.innerHTML = document.querySelector("div.html5-video-container video.video-stream.html5-main-video").src;//标记一下已检查过
        document.body.click();//关闭菜单
    } else {
        markcontainer.innerHTML = document.querySelector("div.html5-video-container video.video-stream.html5-main-video").src;//标记一下已检查过
    }
}