2023-06-04 18:09:47 +08:00

90 lines
2.2 KiB
JavaScript

import puppeteer from 'puppeteer-extra'
import StealthPlugin from 'puppeteer-extra-plugin-stealth'
import { randomNum } from '../tools'
import { win } from '../index'
puppeteer.use(StealthPlugin())
let id
export let browser
/**
* 登录google
*/
export async function loginGoogle(options, tryCount = 1) {
let resolve, reject
const log = clog(options)
const p = new Promise((res, rej) => {
resolve = res
reject = rej
})
id = options.id
const env = {
GUSER: options.user,
GPASS: options.pass
}
if (browser) await browser.close()
browser = await puppeteer.launch({ headless: false })
const page = await browser.newPage()
await page.setExtraHTTPHeaders({
'accept-language': 'en-US,en;q=0.9,hy;q=0.8'
})
log('开始访问 poe')
await page.goto('https://poe.com')
log('已进入 poe')
await page.waitForTimeout(randomNum(1000, 2600))
log('准备进入 google 登录页')
const [response] = await Promise.all([
page.waitForNavigation(() => location.href.startsWith('https://accounts.google.com')),
page.click('.ContinueWithGoogleButton_buttonContentWrapper__Mrp0W')
])
log('已进入 google 登录页')
if (response.ok()) {
await page.waitForSelector('input[type="email"]')
log('准备输入账号')
await page.type('input[type="email"]', env.GUSER)
await Promise.all([
page.waitForNavigation(),
await page.keyboard.press('Enter')
])
log('已输入账号,准备输入密码')
await page.waitForSelector('input[type="password"]', { visible: true })
await page.type('input[type="password"]', env.GPASS)
log('已输入密码,开始登录')
await Promise.all([
page.waitForFunction(() => location.href === 'https://poe.com/'),
await page.keyboard.press('Enter')
])
log('登录成功,准备进入 poe')
return page
}
if (tryCount < 4) {
log(`google 登录失败,准备 ${tryCount} 次重试`)
await page.close()
return await loginGoogle(options, tryCount + 1)
} else {
log('google 登录失败,重试次数已达上限')
reject('google 登录失败')
}
return p
// return Promise.reject('google 登录失败')
}
export function clog(options) {
return (info, data = {}) => {
if (win) {
win.webContents.send('progress', {...options, info, ...data})
}
}
}