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
 
Hocalarım merhaba. Başöğretmenlik videolarını otomatik geçişli izleyebileceğim, çalışan bir script var mı? Tempermonkey ile beraber kullanılan önceki senelerde çalışan tüm betikleri kurup denedim, arka planda çalışma özelliği aktif ama hiçbiri otomatik oynatmıyor. Yardımcı olursanız çok sevinirim. Teşekkürler.
 
Hocalarım merhaba. Başöğretmenlik videolarını otomatik geçişli izleyebileceğim, çalışan bir script var mı? Tempermonkey ile beraber kullanılan önceki senelerde çalışan tüm betikleri kurup denedim, arka planda çalışma özelliği aktif ama hiçbiri otomatik oynatmıyor. Yardımcı olursanız çok sevinirim. Teşekkürler.
Bu arada tarayıcı olarak brawe yi kullandım.
 
ilksms
Geri
Üst