Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var captions = function getCaptions(period) {
- return new Promise((resolve, reject) => {
- var maxTime = 3000;
- var addTime = 0;
- var inputLanguage = 'russian';
- var searchedLanguage = inputLanguage ? inputLanguage : 'english';
- var options = '';
- var el = document.evaluate(".//*[@aria-label='More actions']", document, null, 9, null).singleNodeValue;
- try {
- var scroll = setInterval(function () {
- if (addTime >= maxTime) {
- clearInterval(scroll);
- resolve(el);
- }
- el = document.evaluate(".//*[@aria-label='More actions']", document, null, 9, null).singleNodeValue;
- if (el) {
- addTime = 0;
- clearInterval(scroll);
- el.click()
- var elOpenTranscript = document.evaluate(".//*[text()='Open transcript']", document, null, 9, null).singleNodeValue;
- if (elOpenTranscript) {
- elOpenTranscript.click();
- console.log('Transcript available')
- var elTranscriptDropDown = document.evaluate(".//ytd-transcript-footer-renderer//paper-button", document, null, 9, null).singleNodeValue;
- if (elTranscriptDropDown) {
- elTranscriptDropDown.click();
- var elTranscriptOptions = document.evaluate(".//div[@id='secondary']//paper-listbox[@id='menu']/a[//paper-item-body/div[text()]]", document, null, 7, null);
- console.log('snapshot length: ' + elTranscriptOptions.snapshotLength);
- var languages = [];
- for (let i = 0; i < elTranscriptOptions.snapshotLength; i++) {
- const element = elTranscriptOptions.snapshotItem(i);
- var currLanguage = element.textContent.trim();
- languages.push(currLanguage);
- }
- console.log(languages)
- var filtered = languages.filter(l => l.toLowerCase().includes(searchedLanguage));
- if (filtered.length === 0) {
- filtered = languages.filter(l => l.toLowerCase().includes('english'));
- console.log(filtered);
- if (filtered.length > 0) {
- options = {
- language: 'default',
- languages: elTranscriptOptions
- }
- console.log(`Searched language (${searchedLanguage}) captions not found. Default (English) available.`)
- resolve(options)
- } else {
- resolve('No captions for searched or default language!')
- }
- } else {
- options = {
- language: 'input',
- languages: elTranscriptOptions
- }
- resolve(options)
- }
- resolve(elTranscriptOptions)
- } else {
- console.log('Transcript dropdown menu cannot be open')
- }
- resolve(elOpenTranscript);
- } else {
- clearInterval(scroll);
- console.log('Open Transcript not available')
- resolve('Transcript not available.');
- }
- } else {
- addTime += 1000;
- console.log('adding 1000 ms')
- }
- }, period)
- } catch (error) {
- console.log(error)
- }
- })
- }
- function saveCaptions(captionsObj) {
- var subs = '';
- if (typeof captionsObj === "string") {
- console.log('CAPTIONS NOT AVAILABLE')
- return;
- } else {
- var inputLanguage = 'russian';
- var searchedLanguage = inputLanguage ? inputLanguage : 'english';
- const language = captionsObj.language;
- var captions = captionsObj.languages;
- subs = [];
- console.log(captions.snapshotLength)
- if (captions.snapshotLength > 0) {
- for (let i = 0; i < captions.snapshotLength; i++) {
- const element = captions.snapshotItem(i);
- console.log(element)
- var currLanguage = element.textContent.trim();
- console.log(currLanguage)
- if ((currLanguage.toLowerCase().includes(searchedLanguage) && language === 'input') || (currLanguage.toLowerCase().includes('english') && language === 'default')) {
- element.click();
- setTimeout(() => {
- var elSubs = document.evaluate(".//div[@id='secondary']//div[@id='content']//div[contains(@class, 'cue-group')]/div", document, null, 7, null);
- if (elSubs.snapshotLength > 0) {
- for (let j = 0; j < elSubs.snapshotLength; j++) {
- const row = elSubs.snapshotItem(j);
- subs.push(row.textContent.trim().replace(/\n/, ' '))
- //console.log(row.textContent.trim());
- }
- }
- console.log(subs)
- }, 500)
- break;
- } else {
- 'No captions for searched language or English(default)!'
- }
- }
- } else {
- console.log('Cannot find subs rows!')
- }
- }
- }
- captions(1000)
- .then(res => saveCaptions(res))
- .catch(er => console.log(er))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement