好吧,所以我试图使用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);
});
}
此外,我对普通的伪娘有一些问题,所以我找到了一个装有铬镜的包装。
答案 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();
})();
我测试了提供的代码,即使在无头模式下,它也可以在我的机器上运行。