- Mesajlar
- 606
Güncel çalışan bir program varmı arkadaşlar?
// ==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)");
})();
Bende çalışmadı nedenseKod:// ==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
Hocam birazdan günceli yollayacağımBende çalışmadı nedense
Her şey tam gibiydi
rardan çıkarıp aynı şekilde tempermonkeye iki ayrı dosya olarak yükleyin hocamBende çalışmadı nedense
Her şey tam gibiydi
Hocam ellerine sağlık çok güzel çalışıyorrardan çıkarıp aynı şekilde tempermonkeye iki ayrı dosya olarak yükleyin hocam
