uzman öğretmenlik otomatik video oynatma

Kodla Büyü
Kod:
// ==UserScript==
// @name         OBA Tam Otomatik (timelapse -> VideoJS Play)
// @namespace    https://oba.gov.tr/
// @version      5.0
// @description  Timelapse ikonlu dersi seçer, VideoJS büyük play butonuna basar; bitince sonrakiye geçer.
// @match        https://oba.gov.tr/*
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  const CHECK_MS = 1000;
  const END_THRESHOLD_SEC = 1.0;
  const SELECT_COOLDOWN_MS = 6000;
  const PLAY_COOLDOWN_MS = 2000;

  let lastSelectAt = 0;
  let lastPlayAt = 0;
  let lastSelectedId = "";

  function now() { return Date.now(); }

  function isVisible(el) {
    if (!el) return false;
    const r = el.getBoundingClientRect();
    const s = getComputedStyle(el);
    return r.width > 0 && r.height > 0 && s.display !== "none" && s.visibility !== "hidden" && s.opacity !== "0";
  }

  function safeClick(el) {
    if (!el || !isVisible(el)) return false;
    el.dispatchEvent(new MouseEvent("mousedown", { bubbles: true }));
    el.dispatchEvent(new MouseEvent("mouseup", { bubbles: true }));
    el.click();
    return true;
  }

  function getCurrentContentIdFromUrl() {
    // URL sonunda .../43953 gibi gidiyor (senin örnekte böyle)
    const m = location.pathname.match(/\/(\d+)\s*$/);
    return m ? m[1] : "";
  }

  // 1) timelapse ikonundan ID bul -> content_ID tıkla
  function clickTimelapseLesson() {
    if (now() - lastSelectAt < SELECT_COOLDOWN_MS) return false;

    const icons = [...document.querySelectorAll("i.material-icons[id^='icon_']")].filter(isVisible);
    for (const ic of icons) {
      const txt = (ic.textContent || "").trim().toLowerCase();
      if (txt !== "timelapse") continue;

      const id = ic.id.replace("icon_", "").trim();
      if (!id) continue;

      // Zaten o dersteysek tekrar seçme
      const curId = getCurrentContentIdFromUrl();
      if (curId && curId === id) return false;

      // Aynı ID'yi üst üste spam'leme
      if (id === lastSelectedId) return false;

      const link = document.querySelector(`#content_${CSS.escape(id)}.course-player-object-item`) ||
                   document.querySelector(`#content_${CSS.escape(id)}`);
      if (link && isVisible(link)) {
        lastSelectedId = id;
        lastSelectAt = now();
        return safeClick(link);
      }
    }
    return false;
  }

  function getVideo() {
    // OBA’da video id="video_html5_api" gibi görünüyor
    const v = document.querySelector("video#video_html5_api") ||
              document.querySelector("video");
    return (v && isVisible(v)) ? v : v;
  }

  // 2) VideoJS play: önce butona tıkla, sonra muted+play() dene
  async function forcePlay() {
    if (now() - lastPlayAt < PLAY_COOLDOWN_MS) return false;

    const v = getVideo();
    if (!v) return false;

    // Video zaten oynuyorsa dokunma
    if (!v.paused && !v.ended) return false;

    lastPlayAt = now();

    // (A) VideoJS büyük play butonu
    const bigPlayBtn =
      document.querySelector("button.vjs-big-play-button") ||
      document.querySelector("button[title*='Videoyu Oynat']");

    if (bigPlayBtn && isVisible(bigPlayBtn)) {
      safeClick(bigPlayBtn);
    }

    // (B) Tarayıcı autoplay engelini aşmak için: önce sessiz oynatmayı dene
    try {
      v.muted = true;
      await v.play();
      // İstersen 2 sn sonra sesi geri açmayı dene (bazı tarayıcılarda izin vermez)
      setTimeout(() => { try { v.muted = false; } catch(e) {} }, 2000);
      return true;
    } catch (e) {
      // play() reddedilirse yine de buton tıklaması bazen yeter
      return true;
    }
  }

  function videoNearEnd(v) {
    if (!v || !isFinite(v.duration) || v.duration <= 0) return false;
    return v.currentTime >= (v.duration - END_THRESHOLD_SEC);
  }

  function clickNextByText() {
    const keys = ["sonraki", "devam", "ileri", "tamamla", "bitir"];
    const els = [...document.querySelectorAll("button, [role='button'], a")].filter(isVisible);
    for (const el of els) {
      const t = ((el.innerText || el.textContent || "").trim().toLowerCase()).replace(/\s+/g, " ");
      if (t && keys.some(k => t.includes(k))) return safeClick(el);
    }
    return false;
  }

  setInterval(async () => {
    const v = getVideo();

    // Önce doğru içeriği seç (timelapse)
    clickTimelapseLesson();

    // Video yoksa bir şey yapma
    if (!v) return;

    // Video durmuşsa play'e zorla
    if (v.paused) {
      await forcePlay();
      return;
    }

    // Video bitmek üzereyse sonraki adım + play
    if (videoNearEnd(v)) {
      clickNextByText();
      setTimeout(() => {
        clickTimelapseLesson();
        setTimeout(() => { forcePlay(); }, 900);
      }, 900);
    }
  }, CHECK_MS);

  console.log("[OBA-AUTO] Aktif: timelapse seç + VideoJS play (muted play fallback)");
})();

yine tempermonkey içine kopyalayıp kaydedip çıkın.tempermonkey kurulumu için önceki mesajlara bakabilirsiniz
 
Kod:
// ==UserScript==
// @name         OBA Tam Otomatik (timelapse -> VideoJS Play)
// @namespace    https://oba.gov.tr/
// @version      5.0
// @description  Timelapse ikonlu dersi seçer, VideoJS büyük play butonuna basar; bitince sonrakiye geçer.
// @match        https://oba.gov.tr/*
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  const CHECK_MS = 1000;
  const END_THRESHOLD_SEC = 1.0;
  const SELECT_COOLDOWN_MS = 6000;
  const PLAY_COOLDOWN_MS = 2000;

  let lastSelectAt = 0;
  let lastPlayAt = 0;
  let lastSelectedId = "";

  function now() { return Date.now(); }

  function isVisible(el) {
    if (!el) return false;
    const r = el.getBoundingClientRect();
    const s = getComputedStyle(el);
    return r.width > 0 && r.height > 0 && s.display !== "none" && s.visibility !== "hidden" && s.opacity !== "0";
  }

  function safeClick(el) {
    if (!el || !isVisible(el)) return false;
    el.dispatchEvent(new MouseEvent("mousedown", { bubbles: true }));
    el.dispatchEvent(new MouseEvent("mouseup", { bubbles: true }));
    el.click();
    return true;
  }

  function getCurrentContentIdFromUrl() {
    // URL sonunda .../43953 gibi gidiyor (senin örnekte böyle)
    const m = location.pathname.match(/\/(\d+)\s*$/);
    return m ? m[1] : "";
  }

  // 1) timelapse ikonundan ID bul -> content_ID tıkla
  function clickTimelapseLesson() {
    if (now() - lastSelectAt < SELECT_COOLDOWN_MS) return false;

    const icons = [...document.querySelectorAll("i.material-icons[id^='icon_']")].filter(isVisible);
    for (const ic of icons) {
      const txt = (ic.textContent || "").trim().toLowerCase();
      if (txt !== "timelapse") continue;

      const id = ic.id.replace("icon_", "").trim();
      if (!id) continue;

      // Zaten o dersteysek tekrar seçme
      const curId = getCurrentContentIdFromUrl();
      if (curId && curId === id) return false;

      // Aynı ID'yi üst üste spam'leme
      if (id === lastSelectedId) return false;

      const link = document.querySelector(`#content_${CSS.escape(id)}.course-player-object-item`) ||
                   document.querySelector(`#content_${CSS.escape(id)}`);
      if (link && isVisible(link)) {
        lastSelectedId = id;
        lastSelectAt = now();
        return safeClick(link);
      }
    }
    return false;
  }

  function getVideo() {
    // OBA’da video id="video_html5_api" gibi görünüyor
    const v = document.querySelector("video#video_html5_api") ||
              document.querySelector("video");
    return (v && isVisible(v)) ? v : v;
  }

  // 2) VideoJS play: önce butona tıkla, sonra muted+play() dene
  async function forcePlay() {
    if (now() - lastPlayAt < PLAY_COOLDOWN_MS) return false;

    const v = getVideo();
    if (!v) return false;

    // Video zaten oynuyorsa dokunma
    if (!v.paused && !v.ended) return false;

    lastPlayAt = now();

    // (A) VideoJS büyük play butonu
    const bigPlayBtn =
      document.querySelector("button.vjs-big-play-button") ||
      document.querySelector("button[title*='Videoyu Oynat']");

    if (bigPlayBtn && isVisible(bigPlayBtn)) {
      safeClick(bigPlayBtn);
    }

    // (B) Tarayıcı autoplay engelini aşmak için: önce sessiz oynatmayı dene
    try {
      v.muted = true;
      await v.play();
      // İstersen 2 sn sonra sesi geri açmayı dene (bazı tarayıcılarda izin vermez)
      setTimeout(() => { try { v.muted = false; } catch(e) {} }, 2000);
      return true;
    } catch (e) {
      // play() reddedilirse yine de buton tıklaması bazen yeter
      return true;
    }
  }

  function videoNearEnd(v) {
    if (!v || !isFinite(v.duration) || v.duration <= 0) return false;
    return v.currentTime >= (v.duration - END_THRESHOLD_SEC);
  }

  function clickNextByText() {
    const keys = ["sonraki", "devam", "ileri", "tamamla", "bitir"];
    const els = [...document.querySelectorAll("button, [role='button'], a")].filter(isVisible);
    for (const el of els) {
      const t = ((el.innerText || el.textContent || "").trim().toLowerCase()).replace(/\s+/g, " ");
      if (t && keys.some(k => t.includes(k))) return safeClick(el);
    }
    return false;
  }

  setInterval(async () => {
    const v = getVideo();

    // Önce doğru içeriği seç (timelapse)
    clickTimelapseLesson();

    // Video yoksa bir şey yapma
    if (!v) return;

    // Video durmuşsa play'e zorla
    if (v.paused) {
      await forcePlay();
      return;
    }

    // Video bitmek üzereyse sonraki adım + play
    if (videoNearEnd(v)) {
      clickNextByText();
      setTimeout(() => {
        clickTimelapseLesson();
        setTimeout(() => { forcePlay(); }, 900);
      }, 900);
    }
  }, CHECK_MS);

  console.log("[OBA-AUTO] Aktif: timelapse seç + VideoJS play (muted play fallback)");
})();

yine tempermonkey içine kopyalayıp kaydedip çıkın.tempermonkey kurulumu için önceki mesajlara bakabilirsiniz
Bende çalışmadı nedense
Her şey tam gibiydi
 
Geri
Üst