Disclosure
This article contains referral links to MakeYouTask. If you sign up through our link, we may earn a commission at no cost to you. We only recommend platforms we've personally tested. See our full disclaimer.
The MakeYouTask Macro V2 is an updated version of the automation script with smarter error handling — it auto-restarts short videos, closes age-restricted and unavailable tabs, handles live stream queues, and attempts to auto-click captcha prompts. It's more reliable than the original and requires no manual intervention.
When we published our original MakeYouTask automation guide, we honestly weren't sure how many people would actually use it.
Turns out — a lot of you did. And a lot of you came back with feedback.
Thank you. Genuinely. The reports you sent in — the edge cases, the bug descriptions, the "hey this doesn't work when..." messages — these are exactly what made V2 possible. This update exists because of you, and it's a meaningfully better script because of it.
Here's what you told us was breaking, and here's what V2 does about it.
What's New in V2
The Dashboard Manager (Script #1) hasn't changed — it's still working well and doing exactly what it should. All the improvements are in the Terminator script (Script #2), which handles the video playback side of things.
The four things V2 fixes:
- Short videos under 10 seconds: Some ads are only 6–8 seconds long. Previously the video would end and just sit there, stalling the flow. V2 now detects short videos and auto-restarts them, so the tab stays active until the PTC timer finishes.
- Age-restricted & embed-disabled videos: YouTube sometimes blocks videos from playing in embedded players — age gates, restricted content, region locks. Before, these would just hang. V2 detects the error state and closes the tab automatically so the script can move on.
- Live stream queues: Two readers flagged that some video slots contain live streams that haven't started yet — you get a waiting room that never resolves. V2 detects the offline slate and the live stream queue, and closes those tabs rather than waiting indefinitely.
- Captcha auto-click attempt: V2 now tries to nudge the captcha widget when the page loads. This works reliably for Cloudflare Turnstile (which often auto-resolves for real browsers anyway), and makes a best-effort attempt for reCAPTCHA. Due to browser security, it can't click inside a cross-origin captcha iframe — but for sites where the captcha auto-passes, this speeds things up.
Net Result
The script now handles the most common failure modes automatically. Instead of hanging on a broken video tab and stalling everything, V2 detects the problem and gets out of the way. The whole session runs more smoothly with less babysitting.
Script #1 – PTC Dashboard Manager (Unchanged)
This script handles the MakeYouTask dashboard — auto-clicking "Watch Video" buttons and tracking which ads you've already seen. No changes needed here; it's still running well.
If you already have this installed from the original guide, you don't need to update it. If you're setting up fresh, install it now.
Script #1 — Copy this entire script:
// ==UserScript==
// @name PTC Dashboard Manager (Persistent)
// @match *://makeyoutask.com/ptc*
// @grant none
// @version 2026.02.11
// ==/UserScript==
(function() {
'use strict';
const MAX_HISTORY = 100;
function processDashboard() {
if (document.hidden) return;
// 1. Handle "OK" / Success Popups
const okBtn = document.querySelector('.swal2-confirm');
if (okBtn && okBtn.offsetParent !== null) {
console.log("[PTC] Success popup found. Clicking OK...");
okBtn.click();
return;
}
// 2. Get click history
let clickedAds = JSON.parse(localStorage.getItem('ptc_clicked_history') || "[]");
// 3. Find fresh ads
let availableAds = Array.from(document.querySelectorAll('a, button')).filter(el => {
const textMatch = el.innerText.includes("Watch Video");
const isVisible = el.offsetParent !== null;
const adId = el.href || el.innerText + el.className;
return textMatch && isVisible && !clickedAds.includes(adId);
});
// 4. Click next available
if (availableAds.length > 0) {
const targetAd = availableAds[0];
const targetId = targetAd.href || targetAd.innerText + targetAd.className;
console.log("[PTC] Next ad found. Clicking in 3s...");
setTimeout(() => {
clickedAds.push(targetId);
if (clickedAds.length > MAX_HISTORY) clickedAds.shift();
localStorage.setItem('ptc_clicked_history', JSON.stringify(clickedAds));
targetAd.scrollIntoView({ behavior: 'smooth', block: 'center' });
targetAd.click();
}, 3000);
} else {
console.log("[PTC] No new ads found on this page.");
}
}
setInterval(processDashboard, 5000);
})();
What this script does:
- Automatically clicks "OK" on success popups
- Finds fresh "Watch Video" buttons
- Tracks clicked ads in localStorage (won't click the same ad twice)
- Auto-clicks the next available task every 5 seconds
Script #2 – PTC Video & Tab Handler V2 (Updated)
Replace your existing Script #2 with this one. This is where all the V2 improvements live.
If you're installing fresh: add a new script in Tampermonkey, delete the default code, paste this in, and save.
Script #2 V2 — Copy this entire script:
// ==UserScript==
// @name PTC Video & Tab Handler (Terminator)
// @match *://*/ptc/view/*
// @match *://*.youtube.com/embed/*
// @match *://www.youtube.com/watch*
// @grant window.close
// @run-at document-start
// @allFrames true
// ==/UserScript==
(function() {
'use strict';
const hostname = window.location.hostname;
const pathname = window.location.pathname;
// ── Helper ────────────────────────────────────────────────────────────────
const closeTab = () => {
window.close();
try { window.top.close(); } catch(e) {}
if (!window.closed) {
window.location.href = 'about:blank';
setTimeout(() => window.close(), 500);
}
};
// ── 1. YouTube Embed Logic ────────────────────────────────────────────────
if (hostname.includes('youtube.com') && pathname.includes('/embed/')) {
let videoHandlersAttached = false;
// Close tab on error/restriction/live-queue states
const checkForErrors = () => {
if (document.querySelector('.ytp-error, .ytp-age-gate, .ytp-age-gate-overlay')) {
console.log('[PTC] Video unavailable or age-restricted. Closing tab.');
closeTab(); return true;
}
const watchOnYT = document.querySelector('.ytp-watch-on-youtube');
if (watchOnYT && watchOnYT.offsetParent !== null) {
console.log('[PTC] Video restricted to YouTube only. Closing tab.');
closeTab(); return true;
}
if (document.querySelector('.ytp-offline-slate')) {
console.log('[PTC] Live stream queue detected. Closing tab.');
closeTab(); return true;
}
return false;
};
const attachVideoHandlers = (video) => {
if (videoHandlersAttached) return;
videoHandlersAttached = true;
video.addEventListener('loadedmetadata', () => {
if (!isFinite(video.duration)) {
console.log('[PTC] Live stream (infinite duration). Closing tab.');
closeTab(); return;
}
if (video.duration < 10) {
console.log(`[PTC] Short video (${video.duration.toFixed(1)}s) – auto-restart enabled.`);
}
});
// Auto-restart videos shorter than 10 seconds
video.addEventListener('ended', () => {
if (video.duration < 10) {
console.log(`[PTC] Short video ended – restarting.`);
video.currentTime = 0;
video.play().catch(() => {});
}
});
};
const forcePlay = () => {
const video = document.querySelector('video');
if (!video) return;
video.muted = true;
video.volume = 0;
attachVideoHandlers(video);
const player = document.querySelector('#movie_player');
if (player && typeof player.playVideo === 'function') player.playVideo();
video.play().catch(() => {
const bigPlay = document.querySelector('.ytp-large-play-button');
if (bigPlay) bigPlay.click();
});
};
// Poll: force-play + check for errors until video is running
const playInterval = setInterval(() => {
if (checkForErrors()) { clearInterval(playInterval); return; }
const v = document.querySelector('video');
if (v && v.paused) forcePlay();
else if (v && !v.paused) clearInterval(playInterval);
}, 1500);
setTimeout(() => clearInterval(playInterval), 15000);
// Keep checking for errors for slow-loading restricted videos
const errorPoll = setInterval(() => {
if (checkForErrors()) clearInterval(errorPoll);
}, 2000);
setTimeout(() => clearInterval(errorPoll), 15000);
}
// ── 2. Watch Page Logic (Aggressive Termination) ──────────────────────────
if (hostname.includes('youtube.com') && pathname.startsWith('/watch')) {
console.log('[PTC] Watch page detected – closing tab.');
const terminate = () => {
window.close();
const s = document.createElement('script');
s.text = "window.open('','_self').close();";
document.body?.appendChild(s);
if (!window.closed) {
window.location.href = 'about:blank';
setTimeout(() => window.close(), 500);
}
};
setTimeout(terminate, 1200);
setTimeout(terminate, 3000);
}
// ── 3. PTC Verification Logic ─────────────────────────────────────────────
if (window.top === window.self && pathname.includes('/ptc/view/')) {
// Best-effort captcha click.
// Cloudflare Turnstile often auto-solves for real browsers.
// reCAPTCHA v2 is cross-origin so only the outer container can be nudged.
const tryClickCaptcha = () => {
const turnstile = document.querySelector('.cf-turnstile');
if (turnstile) { turnstile.click(); return; }
const recaptcha = document.querySelector('.g-recaptcha');
if (recaptcha) { recaptcha.click(); return; }
const iframe = document.querySelector(
'iframe[src*="recaptcha"], iframe[src*="challenges.cloudflare"], iframe[title*="captcha" i], iframe[title*="reCAPTCHA"]'
);
if (iframe) (iframe.parentElement || iframe).click();
};
// Early nudges after page settles
setTimeout(tryClickCaptcha, 1500);
setTimeout(tryClickCaptcha, 3500);
const checkCaptchaAndVerify = setInterval(() => {
const cfResponse =
document.querySelector('[name="cf-turnstile-response"]')?.value ||
document.querySelector('[name="g-recaptcha-response"]')?.value;
const isSolved = cfResponse && cfResponse.length > 10;
const btn = document.querySelector('#verify');
if (!isSolved) {
tryClickCaptcha();
console.log('[PTC] Waiting for captcha...');
return;
}
if (btn && !btn.disabled && btn.offsetParent !== null) {
clearInterval(checkCaptchaAndVerify);
console.log('[PTC] Captcha confirmed. Clicking verify in 2s...');
setTimeout(() => { btn.click(); console.log('[PTC] Claim clicked.'); }, 2000);
}
}, 2000);
}
})();
What's changed in V2:
- Short videos (<10s) now auto-restart so the tab stays active
- Age-restricted and embed-disabled videos are detected and the tab closes automatically
- Live stream queues are detected (both by player state and infinite video duration) and closed
- Captcha widget is nudged automatically on page load
- Shared
closeTab()helper with multiple fallbacks for more reliable tab closure
How to Update (If You Already Have V1)
Updating takes about 30 seconds.
- Click the Tampermonkey extension icon
- Click Dashboard
- Find "PTC Video & Tab Handler (Terminator)"
- Click the edit (pencil) icon
- Select all the existing code and delete it
- Paste in the V2 script above
- Click File → Save
That's it. Your Dashboard Manager script (Script #1) stays exactly as it is.
Fresh Install?
If you haven't set up the macros at all yet, start with the original guide which walks through the full Tampermonkey setup step-by-step. Then come back here and use the V2 script above for Script #2.
What to Expect Now
With V2 running, a typical session should look noticeably cleaner. You'll see fewer stalled tabs and less manual intervention needed to get things unstuck.
The most visible change will be on sessions with a lot of video variety. When the script hits a restricted or unavailable video, it'll close and move on instead of hanging. Short video ads will loop in the background without stalling out. If a captcha auto-passes (which Cloudflare Turnstile does frequently for real browsers), you won't even need to touch it.
You'll still need to manually solve captchas when they require it — that hasn't changed and is intentional. Staying present and solving captchas is what keeps your account in good standing.
Still Semi-Passive, Not a Bot
V2 is still designed to assist — not replace — an active session. Monitor the process, solve captchas when they appear, and keep an eye on progress. As long as you're present, the ban risk remains zero.
Keep the Feedback Coming
This update only happened because people told us what wasn't working. If V2 throws up something unexpected — a new error state, a weird edge case, something that doesn't close when it should — let us know.
The goal is for this to work as smoothly as possible for everyone using it. Reader feedback is the fastest way to get there.
If MakeYouTask makes changes on their end that break things, we'll update the script again. That's just part of maintaining something like this.
Not on MakeYouTask yet?
Join MakeYouTask Now (Free)$0.10 min withdrawal · FaucetPay & CWallet supported
Final Thoughts
Bottom Line
V2 is a meaningful improvement over V1 in real-world conditions. The core flow is the same — Script #1 handles the dashboard, Script #2 handles video playback — but V2 now handles the edge cases that were causing sessions to stall. Update Script #2, leave Script #1 as-is, and enjoy a smoother run.
Related Reading
Was this article helpful?