无法登录实时仪表板

时间:2019-05-08 12:52:13

标签: javascript node.js

好吧,所以我试图使用puppeteer创建一个函数,以使用实时仪表板更改抽搐标题,但我什至无法登录...我在做什么错了?

async function titlechange(title) {

    var revisionInfo = await puppeteerResolver({
        folderName: '.chromium-browser-snapshots',
        hosts: ["https://storage.googleapis.com", "https://npm.taobao.org/mirrors"],
        retry: 3
    });
    var browser = await revisionInfo.puppeteer.launch({
        headless: false,
        executablePath: revisionInfo.executablePath
    }).catch(function (error) {
        console.log(error);
    });

    const unput = 'body > div.ReactModalPortal > div > div > div > div.tw-border-radius-medium.tw-flex.tw-overflow-hidden > div > div > form > div > div:nth-child(1) > div > div.tw-relative > input';
    const pwput = 'body > div.ReactModalPortal > div > div > div > div.tw-border-radius-medium.tw-flex.tw-overflow-hidden > div > div > form > div > div:nth-child(2) > div > div:nth-child(1) > div.password-input__container.tw-relative > div.tw-relative > input';
    const pgbtn = 'body > div.ReactModalPortal > div > div > div > div.tw-border-radius-medium.tw-flex.tw-overflow-hidden > div > div > form > div > div:nth-child(3) > button';
    const titleput = '#root > div > div.tw-flex.tw-flex-column.tw-flex-nowrap.tw-full-height > div.tw-flex.tw-flex-nowrap.tw-full-height.tw-overflow-hidden.tw-relative > div > div > div.drag-and-drop-layout-container__with-navs.scrollable-area > div.simplebar-scroll-content > div > div > div:nth-child(1) > div:nth-child(2) > div > div > div.drag-and-drop-card-container.tw-border-b.tw-border-l.tw-border-r.tw-border-t.tw-c-background-base.tw-elevation-1.tw-flex.tw-flex-column.tw-lg-mg-b-2.tw-mg-b-1 > div.drag-and-drop-card-content.tw-relative > div > div > div:nth-child(1) > div > div > textarea';
    const updatebtn = '#root > div > div.tw-flex.tw-flex-column.tw-flex-nowrap.tw-full-height > div.tw-flex.tw-flex-nowrap.tw-full-height.tw-overflow-hidden.tw-relative > div > div > div.drag-and-drop-layout-container__with-navs.scrollable-area > div.simplebar-scroll-content > div > div > div:nth-child(1) > div:nth-child(2) > div > div > div.drag-and-drop-card-container.tw-border-b.tw-border-l.tw-border-r.tw-border-t.tw-c-background-base.tw-elevation-1.tw-flex.tw-flex-column.tw-lg-mg-b-2.tw-mg-b-1 > div.drag-and-drop-card-content.tw-relative > div > div > div.tw-align-items-start.tw-flex.tw-flex-row.tw-full-width.tw-justify-content-start > button';
    const page = await browser.newPage();
    await page.goto('https://www.twitch.tv/**Nope**/dashboard/live');
    page.once('load', () => { 
        setTimeout( async () => {
            /* LOGIN */
            const userinput = await page.$(unput);
            const pwinput = await page.$(pwput);
            const loginbtn = await page.$(pgbtn);
            await userinput.click();
            await userinput.type("**Nope**", {delay: 150});
            await pwinput.click();
            await pwinput.type("**Nope**", {delay: 150});
            await loginbtn.click();
            /* LOGIN */

            /* UPDATE */
            const titinput = await page.$(titleput);
            const update = await page.$(updatebtn);
            var typdis = title;
            await titinput.click();
            await titinput.type(typdis);
            await update.click();
            browser.close();
            /* UPDATE */
        }, 5500);
    });
}

此外,我对普通的伪娘有一些问题,所以我找到了一个装有铬镜的包装。

1 个答案:

答案 0 :(得分:0)

Twitch对使用机器人进行登录/注册有非常严格的政策,实际上是它会检测到您使用伪造者,并建议您解决验证码,以证明您不是机器人。有几种解决方法,但是最简单的方法是,只要您手动登录并在puppeter中使用它,就可以从浏览器中获取Cookie。

const puppeteer = require("puppeteer");

const accountsCookie = {
    "name": "auth-token",
    "value": <**NOPE**>,
    "domain": ".twitch.tv",
    "path": "/",
    "httpOnly": false,
    "secure": true
}

(async () => {
    const browser = await puppeteer.launch({
        args: ['--no-sandbox',
            '--proxy-server="direct://"',
            '--proxy-bypass-list=*'
        ]
    });
    const [page] = await browser.pages();
    await page.setCookie(accountsCookie);
    await page.goto('https://www.twitch.tv/**Nope**/dashboard/live');
})();

您的某些选择器似乎有误。此外,由于伪造者的窗口大小有限,因此按钮不在视图范围内。您的方法使用选择器获取一个元素,如果需要,将其滚动到视图中,然后使用page.mouse单击该元素的中心。问题在于,因为视图(div)正在使元素的boundingBox()处于动画状态,并且在询问框位置和完成click()的时间之间,元素已移动或不可单击。因此,在使用该方法之前,您必须手动滚动到它。

(async () => {
    const revisionInfo = await puppeteerResolver({
        revision: "",
        detectionPath: "",
        folderName: '.chromium-browser-snapshots',
        hosts: ["https://storage.googleapis.com", "https://npm.taobao.org/mirrors"],
        retry: 3
    });

    const titleSelector = '#root > div > div.tw-flex.tw-flex-column.tw-flex-nowrap.tw-full-height > div.tw-flex.tw-flex-nowrap.tw-full-height.tw-overflow-hidden.tw-relative > div > div > div.drag-and-drop-layout-container__with-navs.scrollable-area > div.simplebar-scroll-content > div > div > div > div > div > div > div > div > div > div > div > div > div > textarea';
    const updatebtn = '#root > div > div.tw-flex.tw-flex-column.tw-flex-nowrap.tw-full-height > div.tw-flex.tw-flex-nowrap.tw-full-height.tw-overflow-hidden.tw-relative > div > div > div.drag-and-drop-layout-container__with-navs.scrollable-area > div.simplebar-scroll-content > div > div > div > div > div > div > div.drag-and-drop-card-container.tw-border-b.tw-border-l.tw-border-r.tw-border-t.tw-c-background-base.tw-elevation-1.tw-flex.tw-flex-column.tw-lg-mg-b-2.tw-mg-b-1 > div.drag-and-drop-card-content.tw-relative > div > div > div.tw-align-items-start.tw-flex.tw-flex-row.tw-full-width.tw-justify-content-start > button';

    const browser = await revisionInfo.puppeteer.launch({
        args: ['--no-sandbox'],
        executablePath: revisionInfo.executablePath
    });

    const page = await browser.newPage();
    await page.setCookie(accountsCookie);
    await page.goto('https://www.twitch.tv/**NOPE**/dashboard/live', {waitUntil: "networkidle0"});
    await page.type(titleSelector, "YOUR TITLE GOES HERE");
    await page.waitFor(2000);
    await page.evaluate(btn => {
        const updateButton = document.querySelector(btn);
        updateButton.scrollIntoView();
        updateButton.click();
    }, updatebtn);
    await page.waitFor(1000);
    await browser.close();
})();

我测试了提供的代码,即使在无头模式下,它也可以在我的机器上运行。

相关问题