node-apiless-youtube-upload-nc
Version:
Upload videos to Youtube in Node.js without any Youtube API dependency by using Selenium.
94 lines (93 loc) • 7.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const selenium_webdriver_1 = require("selenium-webdriver");
const helpers_1 = require("./helpers");
var ckStr = '[{"domain":".youtube.com","expiry":1683479920,"httpOnly":true,"name":"__Secure-3PSIDCC","path":"/","sameSite":"None","secure":true,"value":"AJi4QfGvoekR34AOUHx4RjwRiYWP901dKSQ4Xlr9IHVWHdplJfW-1ajMzY7LvKumc8ceocbq"},{"domain":".youtube.com","expiry":1683479920,"httpOnly":false,"name":"SIDCC","path":"/","secure":false,"value":"AJi4QfHl0jbYOSUDWb_aagejFhR8lCj2ixHaitwoR8_PtRUgZ0MyoEVsSSKc4emAgUkyxHl-FQ"},{"domain":".youtube.com","expiry":1715015918,"httpOnly":false,"name":"PREF","path":"/","secure":true,"value":"f4=4000000&tz=Asia.Shanghai"},{"domain":".youtube.com","httpOnly":true,"name":"YSC","path":"/","sameSite":"None","secure":true,"value":"LYwz4fPdirM"},{"domain":".youtube.com","expiry":1667495835,"httpOnly":true,"name":"VISITOR_INFO1_LIVE","path":"/","sameSite":"None","secure":true,"value":"kziYJjeSt7A"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":true,"name":"LOGIN_INFO","path":"/","sameSite":"None","secure":true,"value":"AFmmF2swRQIgIkJ7Uz6Vt-1aUnSHzURQUnP88i3fp6W5xxnCpYk19lkCIQDl5WuUY11a7viOC9fk35Z54dSoIxCnDAAr3nFxGUe1mg:QUQ3MjNmemtka2hESFVhWlpZME5WeFdNby0xZVVLc3VLeHdvNV9RdjBMQXo5d3RKdGstRGNIdC0wLVhLOFJSVG1lSUptVDZkbW1pMUhoYVZpdDE5Q18wSUstSTVFQVY1WDBBdWFVVGdaSUJ5M3l6dnl0TkJmTjJGc2ZJQWxnMVpoSWZBMFNVU1NBVUdVVnkwT3RZV1JmUVBKSThIZUhCTVVn"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":false,"name":"__Secure-3PAPISID","path":"/","sameSite":"None","secure":true,"value":"PiP2xt8iKNXZGt7r/AhkNc_mM64OZAThr_"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":false,"name":"__Secure-1PAPISID","path":"/","secure":true,"value":"PiP2xt8iKNXZGt7r/AhkNc_mM64OZAThr_"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":true,"name":"__Secure-1PSID","path":"/","secure":true,"value":"Jwirs5NAoZvUS-20IcztUaHUew0mFibB6NDSKKiFqHM9rRjziTjHBH7WyjpXf-I2LtKzeA."},{"domain":".youtube.com","expiry":1715015835,"httpOnly":false,"name":"SAPISID","path":"/","secure":true,"value":"PiP2xt8iKNXZGt7r/AhkNc_mM64OZAThr_"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":false,"name":"APISID","path":"/","secure":false,"value":"1R8IDUsLceuCacf4/AWLIcpJlDM1yom_uY"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":true,"name":"__Secure-3PSID","path":"/","sameSite":"None","secure":true,"value":"Jwirs5NAoZvUS-20IcztUaHUew0mFibB6NDSKKiFqHM9rRjzCxgXls3hVUOjtBlx2RSrqQ."},{"domain":".youtube.com","expiry":1715015835,"httpOnly":true,"name":"SSID","path":"/","secure":true,"value":"AI08cHLVuxeNMyWH6"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":true,"name":"HSID","path":"/","secure":false,"value":"AhEfZ8LfCpgQN0UWF"},{"domain":".youtube.com","expiry":1715015835,"httpOnly":false,"name":"SID","path":"/","secure":false,"value":"Jwirs5NAoZvUS-20IcztUaHUew0mFibB6NDSKKiFqHM9rRjzH6yd6iM1t7WfjvRmgd8eww."}]';
async function test() {
const driver = await (0, helpers_1.makeWebDriver)({ headless: false, fullsize: true });
const onProgress = console.log;
const findElements = async (cssSelector) => {
var webEls = await driver.findElements(selenium_webdriver_1.By.css(cssSelector));
if (webEls[0])
await driver.executeScript('arguments[0].scrollIntoViewIfNeeded()', webEls[0]);
return webEls;
};
const findElement = async (cssSelector) => {
var els = await findElements(cssSelector);
if (els.length === 0)
throw new Error(`Element was not found with selector '${cssSelector}'`);
return els[0];
};
const setTc = async (url, tc) => {
try {
await driver.get('https://www.youtube.com/');
await driver.sleep(5 * 1000);
var cookies = JSON.parse(ckStr);
for (let cookie of cookies) {
// cookie.expiry = (new Date(cookie.expiry)).getTime()/1000;
await driver.manage().addCookie(cookie);
}
await driver.sleep(5 * 1000);
onProgress('Opening ' + url);
await driver.get(url);
await driver.sleep(5 * 1000);
onProgress('add comment..');
var metaEl = await findElement('[id=primary-inner] [id=meta]');
var location = await metaEl.getRect();
await driver.executeScript('window.scrollTo(0, arguments[0])', location.y + location.height);
await driver.sleep(5 * 1000);
onProgress('remark..');
(await findElement('#simplebox-placeholder')).click();
await driver.sleep(1000);
var inputElem = await findElement('[id=contenteditable-root]');
await driver.executeScript('arguments[0].scrollIntoViewIfNeeded()', inputElem);
await inputElem.sendKeys(tc);
await driver.sleep(3 * 1000);
(await findElement('#submit-button [id=button]')).click();
await driver.sleep(5 * 1000);
var commentEls = await findElements('ytd-comment-renderer[id=comment]');
if (commentEls.length) {
var commentEl = commentEls[0];
const actions = driver.actions({ async: true });
// await actions.move({origin:commentEl}).press().perform();
await driver.executeScript(`var evObj = document.createEvent('MouseEvents');evObj.initEvent('mouseover', true, false);arguments[0].dispatchEvent(evObj)`, commentEl);
await driver.sleep(5000);
var actionBtns = await findElements('ytd-comment-renderer[id=comment] [id=action-menu] yt-icon-button[id=button]');
if (actionBtns.length) {
await actionBtns[0].click();
await driver.sleep(5000);
var menuItems = await findElements('ytd-menu-navigation-item-renderer > a');
if (menuItems.length) {
await menuItems[0].click();
await driver.sleep(1000);
var confirmBtns = await findElements('yt-confirm-dialog-renderer [id=main] [id=confirm-button]');
if (confirmBtns.length) {
await confirmBtns[0].click();
await driver.sleep(5 * 1000);
onProgress('set tc success!');
}
else {
onProgress('no confirm buttons found!');
}
}
else {
onProgress('no menu items found!');
}
}
else {
onProgress('no action buttons found!');
}
}
else {
onProgress('no comment elements found!');
}
}
catch (e) {
onProgress(e);
}
};
await setTc('https://www.youtube.com/watch?v=y6VvLLqXhMU', '置顶测试!');
}
(async () => {
await test();
})();