UNPKG

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
"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(); })();