Simple YouTube Skipper

Hola, mundo!

En vista de la nueva política de YouTube de blockear Ad Blockers, me he puesto a pensar qué clase de mecanismo utiliza para detectarlos.
Nunca he usado un Ad Blocker, ni mucho menos para YouTube, pero me consta que en general, se prensentan en forma de extensiones para el navegador. En tal caso, es posible que YouTube simplemente tenga una lista negra de extensiones y al detectar alguna de éstas, se niegue a funcionar al completo.

Bajo esta premisa, he desarrollado un pequeño "Ad Blocker" trivial, que se ejecuta simplemente desde la consola JavaScript del navegador. De momento sólo lo he probado en Chrome, pero funciona perfectamente. Para utilizarlo, basta con abrir las herramientas de desarrollo de Chrome (tecla F12), y ejecutar el siguiente script en el intérprete que sale bajo la pestaña "Consola":

//Simple YouTube Skipper by SkyNoxt
setInterval(function () {
    if (document.querySelector(".ad-showing")) {
        let video = document.querySelector("video");
        if (!isNaN(video.duration)) video.currentTime = video.duration;
        else document.querySelector(".ytp-ad-skip-button-container").click();
    }
}, 1000);


El script en sí es muy simple: registra un evento que se ejecuta cada un tiempo determinado. Dicho evento tiene 2 partes principales:

1 - Detectar cuándo hay un anuncio activo, obtener el nodo HTML correspondiente al video y llevarlo automáticamente hasta el final.
2 - Detectar el botón que sale sobre el reproductor para cerrar anuncios estáticos, y presionarlo automáticamente.

Puesto que esta lógica se ejecuta cíclicamente cada un tiempo establecido, es posible que un anuncio se reproduzca durante un máximo de dicho tiempo. En el script se puede ver que lo he puesto cada 1000 milisegundos, pero podéis cambiarlo según vuestras preferencias.

Tened en cuenta que el evento seguirá activo hasta que la pestaña actual de Chrome (aquélla donde se reproduce YouTube, y en la cuál hay que ejecutar el script) navegue hacia otra página, o se actualize. Esto no incluye abrir otros videos, o ir hacia la página principal de YouTube mediante su logo en la web. Dichas acciones se pueden realizar tantas veces como se desee sin necesidad de ejecutar el script de nuevo, gracias al mecanismo que usa YouTube para navegar de un contenido a otro, sin recargar completamente la página.

Me imagino que este será el mismo concepto que sigan los Ad Blockers. Sin embargo, al no requerir ninguna extensión, resulta en una instalación más limpia y supongo que será bastante más difícil de detectar :).

Un saludo,

~Sky
Buenas,

He probado el script que compartiste @SkyNoxt y funciona muy bien. Como últimamente estoy mirando bastantes videos de Youtube y me da algo de pereza estar abriendo la consola y pegando el script, he creado una extensión local para Chrome de forma que automáticamente se ejecute cuando entre en Youtube.

He adjuntado un fichero comprimido que simplemente contiene 4 ficheros que son los siguientes:
    - manifest.json: Fichero con configuración de la extensión. Aquí definimos que queremos aplicar el script solo en Youtube.
    - script.js: Aquí esta el script que ha compartido SkyNoxt.
    - index.html: Un fichero html que se muestra al colocar el cursor sobre la extensión.
    - icon_128.png: Simplemente un icono para identificar más fácilmente la extensión.

Si alguien esta interesado en probar la extensión es muy fácil de hacer.
    1. Primero se descarga el fichero y se descomprime, eso debería generar una carpeta con los 4 ficheros dentro.
    2. Después simplemente hay que abrir el apartado de extensiones de Chrome y activar el modo desarrollador. Una vez activado deberían aparecen varias opciones.
    3. Pulsamos la opción Cargar descomprimida y seleccionamos la carpeta que contiene la extensión.
    4. Dejamos el plugin activado y en principio ya estaría.

Una vez activado al entrar a Youtube si salta un anuncio este se debería cerrar casi instantáneamente y cargar el video que queramos ver.


Os dejo el código de los ficheros por si alguien tiene curiosidad y no quiere descargar nada.
Manifest.json
{
    "name": "Youtube Ad Remover",
    "version": "1.0.0",
    "description": "Removes ads from youtube videos",
    "manifest_version": 3,
    "action":{
        "default_popup": "index.html",
        "default_title": "Test Extension"
    },
    "content_scripts": [
        {
            "matches": ["*://*.youtube.com/*"],
            "js": ["script.js"]
        }
    ],
    "host_permissions": ["<all_urls>"],
    "icons": {
        "128": "icon_128.png"
    }
}


Script.js
//Simple YouTube Skipper by SkyNoxt
setInterval(function () {
    if (document.querySelector(".ad-showing")) {
        let video = document.querySelector("video");
        if (!isNaN(video.duration)) video.currentTime = video.duration;
        else document.querySelector(".ytp-ad-skip-button-container").click();
    }
}, 1000);


Index.html
<!DOCTYPE html>
<html>
    <head>
        <title>Youtube Ad Remover</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div>Youtube Ad Remover</div>
    </body>
</html>


Saludos.

Adjuntos

Parcece que funciona correctamente, gracias @SkyNoxt y @prizzio.
Funciona de lujo, muchas gracias [beer]
Alguien se anima a portarla a firefox?
@ElSrStinson Lo he probado hoy muy rápidamente en Firefox y funcionó con éxito sin ninguna modificación.

Un saludo,

~Sky
En safari también funciona bien @SkyNoxt ;)
7 respuestas