!44 修复#星铁公告/资讯/活动报错puppeteer.browserInit is not a function,新增登录验证码自动获取ticket,更新依赖
Merge pull request !44 from touchscale/master
This commit is contained in:
		
						commit
						5abba8b80e
					
				|  | @ -73,13 +73,18 @@ export default class loginEvent extends EventListener { | |||
|         type: 'list', | ||||
|         name: 'type', | ||||
|         message: '触发滑动验证,需要获取ticket通过验证,请选择获取方式:', | ||||
|         choices: ['1.手动获取ticket', '2.滑动验证app请求码获取'] | ||||
|         choices: ['0.自动获取ticket', '1.手动获取ticket', '2.滑动验证app请求码获取'] | ||||
|       } | ||||
|     ]) | ||||
| 
 | ||||
|     await common.sleep(200) | ||||
|     let ticket | ||||
| 
 | ||||
|     if (ret.type == '0.自动获取ticket') { | ||||
|       ticket = await this.getTicket(event.url) | ||||
|       if (!ticket) console.log('\n请求错误,返回手动获取ticket方式\n') | ||||
|     } | ||||
| 
 | ||||
|     if (ret.type == '2.滑动验证app请求码获取') { | ||||
|       ticket = await this.requestCode(event.url) | ||||
|       if (!ticket) console.log('\n请求错误,返回手动获取ticket方式\n') | ||||
|  | @ -103,6 +108,27 @@ export default class loginEvent extends EventListener { | |||
|     this.client.submitSlider(ticket.trim()) | ||||
|   } | ||||
| 
 | ||||
|    async getTicket (url) { | ||||
|     let req = `https://hlhs-nb.cn/captcha/slider?key=${Bot.uin}` | ||||
|     await fetch(req, { | ||||
|       method: 'POST', | ||||
|       body: JSON.stringify({ url }) | ||||
|     }) | ||||
| 
 | ||||
|     console.log('\n----请打开下方链接并在2分钟内进行验证----') | ||||
|     console.log(`${logger.green(req)}\n----完成后将自动进行登录----`) | ||||
| 
 | ||||
|     for (let i = 0; i < 40; i++) { | ||||
|       let res = await fetch(req, { | ||||
|         method: 'POST', | ||||
|         body: JSON.stringify({ submit: Bot.uin }) | ||||
|       }) | ||||
|       res = await res.json() | ||||
|       if (res.data?.ticket) return res.data.ticket | ||||
|       await common.sleep(3000) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   async requestCode (url) { | ||||
|     let txhelper = { | ||||
|       url: url.replace('ssl.captcha.qq.com', 'txhelper.glitch.me') | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ | |||
|     "node-xlsx": "^0.21.2", | ||||
|     "oicq": "^2.3.1", | ||||
|     "pm2": "^5.3.0", | ||||
|     "puppeteer": "^20.1.2", | ||||
|     "puppeteer": "^20.2.1", | ||||
|     "redis": "^4.6.6", | ||||
|     "sequelize": "^6.31.1", | ||||
|     "sqlite3": "^5.1.6", | ||||
|  |  | |||
|  | @ -44,86 +44,13 @@ export default class MysNews extends base { | |||
| 
 | ||||
|     const param = await this.newsDetail(postId) | ||||
| 
 | ||||
|     const img = await this.rander(param) | ||||
|     const img = await this.render(param) | ||||
| 
 | ||||
|     return await this.replyMsg(img, `崩坏星穹铁道${typeName}:${param.data.post.subject}`) | ||||
|   } | ||||
| 
 | ||||
|   async rander (param) { | ||||
|     const pageHeight = 7000 | ||||
| 
 | ||||
|     await puppeteer.browserInit() | ||||
| 
 | ||||
|     if (!puppeteer.browser) return false | ||||
| 
 | ||||
|     const savePath = puppeteer.dealTpl('mysNews', param) | ||||
|     if (!savePath) return false | ||||
| 
 | ||||
|     const page = await puppeteer.browser.newPage() | ||||
|     try { | ||||
|       await page.goto(`file://${_path}${lodash.trim(savePath, '.')}`, { timeout: 120000 }) | ||||
|       const body = await page.$('#container') || await page.$('body') | ||||
|       const boundingBox = await body.boundingBox() | ||||
| 
 | ||||
|       const num = Math.round(boundingBox.height / pageHeight) || 1 | ||||
| 
 | ||||
|       if (num > 1) { | ||||
|         await page.setViewport({ | ||||
|           width: boundingBox.width, | ||||
|           height: pageHeight + 100 | ||||
|         }) | ||||
|       } | ||||
| 
 | ||||
|       const img = [] | ||||
|       for (let i = 1; i <= num; i++) { | ||||
|         const randData = { | ||||
|           type: 'jpeg', | ||||
|           quality: 90 | ||||
|         } | ||||
| 
 | ||||
|         if (i != 1 && i == num) { | ||||
|           await page.setViewport({ | ||||
|             width: boundingBox.width, | ||||
|             height: parseInt(boundingBox.height) - pageHeight * (num - 1) | ||||
|           }) | ||||
|         } | ||||
| 
 | ||||
|         if (i != 1 && i <= num) { | ||||
|           await page.evaluate(() => window.scrollBy(0, 7000)) | ||||
|         } | ||||
| 
 | ||||
|         let buff | ||||
|         if (num == 1) { | ||||
|           buff = await body.screenshot(randData) | ||||
|         } else { | ||||
|           buff = await page.screenshot(randData) | ||||
|         } | ||||
| 
 | ||||
|         if (num > 2) await common.sleep(200) | ||||
| 
 | ||||
|         puppeteer.renderNum++ | ||||
|         /** 计算图片大小 */ | ||||
|         const kb = (buff.length / 1024).toFixed(2) + 'kb' | ||||
| 
 | ||||
|         logger.mark(`[图片生成][${this.model}][${puppeteer.renderNum}次] ${kb}`) | ||||
| 
 | ||||
|         img.push(segment.image(buff)) | ||||
|       } | ||||
| 
 | ||||
|       await page.close().catch((err) => logger.error(err)) | ||||
| 
 | ||||
|       if (num > 1) { | ||||
|         logger.mark(`[图片生成][${this.model}] 处理完成`) | ||||
|       } | ||||
|       return img | ||||
|     } catch (error) { | ||||
|       logger.error(`图片生成失败:${this.model}:${error}`) | ||||
|       /** 关闭浏览器 */ | ||||
|       if (puppeteer.browser) { | ||||
|         await puppeteer.browser.close().catch((err) => logger.error(err)) | ||||
|       } | ||||
|       puppeteer.browser = false | ||||
|     } | ||||
|   async render (param) { | ||||
|     return await puppeteer.screenshots(this.model, param) | ||||
|   } | ||||
| 
 | ||||
|   async newsDetail (postId) { | ||||
|  | @ -324,7 +251,7 @@ export default class MysNews extends base { | |||
|       logger.mark(`[崩坏星穹铁道${typeName}推送] ${param.data.post.subject}`) | ||||
| 
 | ||||
|       this[postId] = { | ||||
|         img: await this.rander(param), | ||||
|         img: await this.render(param), | ||||
|         title: param.data.post.subject | ||||
|       } | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue