From 76605556c2bfa082679ea5aa0abf75275dd3042d Mon Sep 17 00:00:00 2001 From: phk422 <1769476785@qq.com> Date: Wed, 27 Dec 2023 21:14:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=8A=A0=E8=BD=BD=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E5=8D=87=E8=8E=B7=E5=8F=96=E6=A6=82=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 ++-- src/constants/index.ts | 3 +++ src/utils/index.ts | 2 +- src/weixin/index.ts | 21 ++++++++++++++------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 50fbf3a..a826958 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "dist" ], "scripts": { - "start": "pnpm dev && cross-env NODE_ENV=development node ./index.js", - "start:pro": "pnpm dev && node ./index.js", + "start": "cross-env NODE_ENV=development node ./index.js", + "start:pro": "pnpm build && node ./index.js", "dev": "unbuild --stub", "build": "unbuild", "publish:ci": "npm publish --access public", diff --git a/src/constants/index.ts b/src/constants/index.ts index 817c1d7..52c6a82 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,3 +1,4 @@ +import process from 'node:process' import type { Viewport } from 'puppeteer' export { description, version, name } from '../../package.json' @@ -15,3 +16,5 @@ export enum ACTION { } export const VIEWPORT: Viewport = { width: 1920, height: 1080, deviceScaleFactor: 1.5 } + +export const __DEV__ = process.env.NODE_ENV === 'development' diff --git a/src/utils/index.ts b/src/utils/index.ts index 1491a41..6b25a50 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -21,7 +21,7 @@ export function pathResolve(...paths: string[]) { * @param targetPath - 目标路径 * @returns 返回一个Promise,resolve时为生成的QR码对象,reject时为Error对象 */ -export async function showQrCodeToTerminal(targetPath: string) { +export async function showQrCodeToTerminal(targetPath: string): Promise { return new Promise((resolve, reject) => { const data = UPNG.decode(fs.readFileSync(targetPath)) const code = jsqr(new Uint8ClampedArray(UPNG.toRGBA8(data)[0]), data.width, data.height) diff --git a/src/weixin/index.ts b/src/weixin/index.ts index a70a3ee..8582501 100644 --- a/src/weixin/index.ts +++ b/src/weixin/index.ts @@ -4,7 +4,7 @@ import type { Browser, Page } from 'puppeteer' import puppeteer from 'puppeteer' import type { Ora } from 'ora' import ora from 'ora' -import { ACTION, VIEWPORT, WEIXIN_URL } from '../constants' +import { ACTION, VIEWPORT, WEIXIN_URL, __DEV__ } from '../constants' import { pathResolve, showQrCodeToTerminal, sleep } from '../utils' let browser: Browser @@ -27,8 +27,6 @@ export async function getLoginScanCode() { return new Promise((resolve, reject) => { const el = document.querySelector('.login__type__container__scan__qrcode') if (el) { - if (el.complete) - return resolve() el.onload = () => resolve() el.onerror = reject } @@ -38,9 +36,17 @@ export async function getLoginScanCode() { }) }) const loginCodeImagePath = pathResolve('../cache/login-qr.png') - await sleep(1000) - await loginCode?.screenshot({ path: loginCodeImagePath, type: 'png' }) - const scanCode = await showQrCodeToTerminal(loginCodeImagePath) + const getScanCode = async (): Promise => { + await loginCode?.screenshot({ path: loginCodeImagePath, type: 'png' }) + try { + return await showQrCodeToTerminal(loginCodeImagePath) + } + catch (e) { + await sleep() + return getScanCode() + } + } + const scanCode = await getScanCode() spinner.succeed(yellow('请使用微信扫描二维码登录微信公众平台')) console.log(scanCode) await page.waitForSelector('.weui-desktop-icon.weui-desktop-icon__success.weui-desktop-icon__large', { timeout: 0 }) @@ -158,7 +164,8 @@ export default async function weixinRobot(action: ACTION) { process.exit(0) } catch (err) { - if (process.env.NODE_ENV === 'development') { + console.log(__DEV__) + if (__DEV__) { console.error(err) return }