YouTube Parser (JavaScript)

How to Get Titles, URLs and Views of any YouTube Channel
How to Get Titles, URLs and Views of any YouTube Channel
https://youtu.be/PxbRBqWmqas

πŸ”· Number 1:
var scroll = setInterval(function(){ window.scrollBy(0, 1000)}, 1000);

πŸ”· Number 2:
window.clearInterval(scroll); 
console.clear(); 
urls = $$('a'); 
urls.forEach(function(v,i,a){
	if (v.id=="video-title-link" && v.href){
		console.log('\t'+new Date().toLocaleDateString()+'\t'+v.title+'\t'+v.href+'\t'+v.__shady_native_innerHTML.match(/aria-label=\"(.+?)\"/g)?.[0].match(/[\d,]+ views/g)[0]+'\t')
	}
});

Export any Youtube Playlist Video URLs and Titles to Text or CSV (fast)
Export any Youtube Playlist Video URLs and Titles to Text or CSV (fast)
https://youtu.be/MMgAMbL1pRE

//COPY & PASTE CODE 1:
let goToBottom = setInterval(() => window.scrollBy(0, 400), 1000);

//COPY & PASTE CODE 2:
clearInterval(goToBottom);
let arrayVideos = [];
console.log('\n'.repeat(50));
const links = document.querySelectorAll('a');
for (const link of links) {
	if (link.id === "video-title") {
		link.href = link.href.split('&list=')[0];
		arrayVideos.push(link.title + ';' + link.href);
		console.log(link.title + '\t' + link.href);
	}
}

//COPY & PASTE CODE 3:
let data = arrayVideos.join('\n');
let blob = new Blob([data], {type: 'text/csv'});
let elem = window.document.createElement('a');
elem.href = window.URL.createObjectURL(blob);
elem.download = 'my_data.csv';
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);

Π’ JavaScript closest - это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ° Element. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска блиТайшСго Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ сСлСктору.

javascript
var closestElement = document.getElementById('someElement').closest('.parentClass');

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ closest Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт с классом 'parentClass' для элСмСнта с id 'someElement'. Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ элСмСнта Π½Π΅Ρ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ null.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ условиям, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ классу ΠΈΠ»ΠΈ Ρ‚Π΅Π³Ρƒ.

Поиск блиТайшСго Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚Π΅Π³ΠΎΠΌ:

javascript
var closestDiv = document.getElementById('someElement').closest('div');

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ closest ΠΈΡ‰Π΅Ρ‚ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт с Ρ‚Π΅Π³ΠΎΠΌ <div> для элСмСнта с id 'someElement'.

Поиск блиТайшСго Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта ΠΏΠΎ нСскольким сСлСкторам:

javascript
var closestParent = document.getElementById('someElement').closest('.parentClass, #anotherParent');

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ closest ΠΈΡ‰Π΅Ρ‚ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт сСлСктору '.parentClass' ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ id 'anotherParent'.

Поиск блиТайшСго Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ:

javascript
var closestWithAttribute = document.getElementById('someElement').closest('[data-custom]');

Π—Π΄Π΅ΡΡŒ closest ΠΈΡ‰Π΅Ρ‚ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ data-custom для элСмСнта с id 'someElement'.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π΅ΡΡ‚ΡŒ Π»ΠΈ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ сСлСктором:

javascript
var hasClosestParent = document.getElementById('someElement').closest('.parentClass') !== null;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ провСряСтся, сущСствуСт Π»ΠΈ блиТайший Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт с классом 'parentClass' для элСмСнта с id 'someElement'. Если элСмСнт Π½Π°ΠΉΠ΄Π΅Π½, пСрСмСнная hasClosestParent Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° true, ΠΈΠ½Π°Ρ‡Π΅ - false.


YouTube (Channel)
urls = $$('#contents.style-scope.ytd-rich-grid-renderer a');
urls.forEach(function(v,i,a){
	if (v.id == "video-title-link") {
		var url_video = new URL(v.href);
		url_video = "https://youtu.be/" + url_video.searchParams.get('v');
		var time_video = v.closest("#content").querySelector('#time-status').innerText.replace(/ /ig, '');
		var name_video = v.closest("#content").querySelector('#video-title').innerText;
		var result = name_video + "Β¦" + url_video + "Β¦" + time_video + "Β¦";
		console.log( result.replace(/\n/g, '') );
	}
});

YouTube (Playlist)
Pug прСпроцСссор HTML - free сourse
https://www.youtube.com/playlist?list=PLM7wFzahDYnGI-qirM4PP_0_McH5y2u1v

urls = $$('#contents.style-scope.ytd-playlist-video-list-renderer.style-scope.ytd-playlist-video-list-renderer a');
urls.forEach(function(v,i,a){
	if (v.id == "video-title") {
		var url_video = new URL(v.href);
		url_video = "https://youtu.be/" + url_video.searchParams.get('v');
		var id_video = v.closest("#content").previousElementSibling.querySelector('#index').innerText;
		var time_video = v.closest("#container").querySelector('#text').innerText.replace(/ /ig, '');
		var name_video = v.title;
		var result = id_video + "Β¦" + name_video + "Β¦" + url_video + "Β¦" + time_video + "Β¦";
		console.log( result.replace(/\n/g, '') );
	}
});


urls = $$('#contents.style-scope.ytd-item-section-renderer.style-scope.ytd-item-section-renderer a.yt-simple-endpoint.focus-on-expand.style-scope.ytd-rich-grid-slim-media');
urls.forEach(function(v,i,a){
	url_video = "https://youtu.be/" + v.pathname.replace("/shorts/", "");
	var id_video = i  + 1;
	var name_video = v.title;
	var result = id_video + "Β¦" + name_video + "Β¦" + url_video + "Β¦";
	console.log( result.replace(/\n/g, '') );
});

ΠœΡƒΠ·ΠšΠΎΠΌ
urls = $$('.uk-active .uk-child-width-expand.bilet-item.uk-grid');
urls.forEach(function(v, i, a) {
    var title_show = (v.querySelector('.bilet-title a') || v.querySelector('.bilet-title h4'))?.innerText || '';
	var date_show = v.querySelector('.bilet-date-left').innerText;
	var date_month = v.querySelector('.bilet-month').innerText;
	var date_day_week = v.querySelector('.bilet-week').innerText;
	var date_time = v.querySelector('.bilet-time').innerText;
	var result = date_show + " " + date_month + " (" + date_day_week + ")Β¦" + date_time + "Β¦" + title_show + "Β¦"
	console.log( result.replace(/\n/g, '') );
});

urls = $$('.uk-active .uk-child-width-expand.bilet-item.uk-grid');
urls.forEach(function(v,i,a){
	var temp1 = v.querySelector('.bilet-date-buy').childNodes[0].childNodes[0].childNodes[0].childNodes[1];
	var title_show = v.querySelector('.bilet-title a').innerText;
	var date_show = v.querySelector('.bilet-date-left').innerText;
	var date_month = v.querySelector('.bilet-month').innerText;
	var date_day_week = v.querySelector('.bilet-week').innerText;
	var date_time = v.querySelector('.bilet-time').innerText;
	var result = date_show + " " + date_month + " (" + date_day_week + ")Β¦" + date_time + "Β¦" + title_show + "Β¦"
	console.log( result.replace(/\n/g, '') );
});

urls = $$('.uk-active .uk-child-width-expand.bilet-item.uk-grid');
urls.forEach(function(v,i,a){
	var title_show = v.childNodes[1].childNodes[1].innerText;
	var date_show = v.childNodes[2].childNodes[0].childNodes[0].childNodes[0].childNodes[0].innerText;
	var date_month = v.childNodes[2].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0].innerText;
	var date_day_week = v.childNodes[2].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[1].innerText;
	var date_time = v.childNodes[2].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[2].innerText;
	var result = date_show + " " + date_month + " (" + date_day_week + ")Β¦" + date_time + "Β¦" + title_show + "Β¦"
	console.log( result.replace(/\n/g, '') );
});

iReal Pro
urls = $$('#post_326 .postcontent.restore a');
urls.forEach(function(v,i,a){
	if ( v.href.match(/^irealb.*/g) ) {
		var postcounter = v.closest('.postbitim').querySelector('.postcounter').href;
		console.log ( v.innerText + "Β¦" + v.nextSibling.nodeValue + "Β¦" + v.href + "Β¦" + postcounter + "Β¦" );
	}
});

all-guitar-chords.com
urls = $$('.mb-4.text-xs .flex.w-full.text-center');
urls.forEach(function(v, i, a) {
    var cols = v.querySelectorAll('.py-2, .p-2');
    var values = [];
    cols.forEach(function(col) {
        values.push(col.textContent.trim());
    });
    console.log(values.join('Β¦') + 'Β¦');
});