Skip to content

Instantly share code, notes, and snippets.

@RafalJDev
Last active April 11, 2024 00:42
Show Gist options
  • Save RafalJDev/dcdc5d9f455d84addcdf0e116982aa58 to your computer and use it in GitHub Desktop.
Save RafalJDev/dcdc5d9f455d84addcdf0e116982aa58 to your computer and use it in GitHub Desktop.
Count all videos time duration on youtube channel
//You need to run this in javascript console inside chrome
//Assumptions:
//1. Will count only "expanded" videos on page, you may first need to run script to scroll to last video or do it manually
//2. Tested on chrome, ubuntu, 2019
//3. Time format: hh:mm:ss
var array = document.getElementsByClassName("style-scope ytd-thumbnail-overlay-time-status-renderer");
var arrLength = array.length;
var allHours = 0;
var allMinutes = 0;
var allSeconds = 0;
for (var i=0; i<arrLength; i++) {
var content = array[i].textContent;
// console.log("content: ", content);
var splitedTime = content.split(":");
if (splitedTime.length == 1) {
allSeconds += +splitedTime[0];
} else if (splitedTime.length == 2) {
allMinutes += +splitedTime[0];
allSeconds += +splitedTime[1];
} else if (splitedTime.length == 3) {
allHours += +splitedTime[0];
allMinutes += +splitedTime[1];
allSeconds += +splitedTime[2];
} else {
console.log("WTF error, current content:", content);
}
}
var seconds = allSeconds % 60;
var minutes = (allMinutes % 60 + allSeconds / 60) % 60;
var hours = allHours + allMinutes / 60 + allSeconds / 3600;
// console.log("allHours:", allHours);
// console.log("allMinutes:", allMinutes);
// console.log("allSeconds:", allSeconds);
console.log("Hours:", hours);
console.log("Minutes:", minutes);
console.log("Seconds:", seconds);
//comments leaved for future fast debugging in case of errors, I know, bad practice
//Example page: https://www.youtube.com/user/DNewsChannel/videos
@adamSplendex
Copy link

thanks exactly what i needed today. thx

@nikhilsulghur
Copy link

thanks!

@mkpolkowski
Copy link

Cool script. I saw that it leaves decimals in minutes and hours values because of an issue in lines 38 and 39. My fix is in my fork if you want to pull it.

@mkpolkowski
Copy link

I just realized that the getElementsByClassName that is used to collect data into the array is triggered 8 times for every video in the videos tab of a channel. Four times the content is empty and four times it returns the time of the video. This means that the total time result is four times the actual value.

@itizarsa your solution is nice and clean. I used it in my fork.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment