UNPKG

jarviscrawlercore

Version:
254 lines (221 loc) 6.7 kB
const {loadConfig, checkConfig, getEnvConfig} = require('./cfg'); const { getGameTodayDataSummary, onRightFrameLoadedGTDS, } = require('./gametodaydata'); const { getGameDataReport, onRightFrameLoadedGDR, } = require('./gamedatareport'); const { onRightFrameLoadedGPKCGR, checkGPKGameResult, onCheckGPKGameResult404, } = require('./gpkcheckgameresult'); const {attachJQuery, attachJarvisCrawlerCore} = require('../utils'); const {WaitRightFrame} = require('./utils'); const messages = require('../../pbjs/result_pb'); const log = require('../log'); /** * a bot for dtbk * @param {object} browser - browser * @param {string} cfgfile - cfgfile * @param {bool} debugmode - debug modes * @param {string} envName - name for environment * @param {DTDataType} dtDataType - dtDataType * @param {string} businessid - businessid * @param {string} gamecode - gamecode * @param {string} playername - playername * @param {string} starttime - start time * @param {string} endtime - end time * @return {object} result - {error: err, ret: ret} */ async function dtbkbot( browser, cfgfile, debugmode, envName, dtDataType, businessid, gamecode, playername, starttime, endtime, ) { let ret = undefined; const cfg = loadConfig(cfgfile); const cfgerr = checkConfig(cfg); if (cfgerr) { const errstr = 'config file error: ' + cfgerr; log.error(errstr); return {error: errstr}; } const envcfg = getEnvConfig(cfg, envName); if (!envcfg) { const errstr = 'no envName ' + envName; log.error(errstr); return {error: errstr}; } const page = await browser.newPage(); page.on('console', (msg) => { log.debug('PAGE LOG:', msg.text()); }); page.on('response', async (response) => { if (dtDataType == messages.DTDataType.DT_DT_GPKCHECKGAMERESULT) { await onCheckGPKGameResult404(response); } }); await page .setViewport({ width: 1920, height: 920, deviceScaleFactor: 1, }) .catch((err) => { log.error('dtbkbot.setViewport', err); }); await page.goto(envcfg.url).catch((err) => { log.error('dtbkbot.goto', err); }); // 等待登录加载完成 await page .waitForFunction(() => { const objs = document.getElementsByClassName('loginbox'); if (objs.length > 0) { return true; } return false; }) .catch((err) => { log.error('dtbkbot.waitForFunction.loginbox', err); }); // 登录 await page.type('.loginuser', envcfg.username); await page.type('.loginpwd', envcfg.password); await page.click('.loginbtn'); // 等待页面跳转完成 await page.waitForNavigation({waitUntil: 'load'}).catch((err) => { log.error('catch a err ', err); }); // 处理frames const topFrame = await page.frames().find((frame) => { return frame.name() === 'topFrame'; }); const leftFrame = await page.frames().find((frame) => { return frame.name() === 'leftFrame'; }); const rightFrame = await page.frames().find((frame) => { return frame.name() === 'rightFrame'; }); if (topFrame) { topFrame.$eval('.user', (ele) => { ele.children[0].children[1].className = 'logoutbtn'; }); } if (leftFrame && rightFrame) { const waitRightFrame = new WaitRightFrame(page); page.on('framenavigated', async (frame) => { if (frame.name() === 'rightFrame') { log.debug(frame.url()); await attachJQuery(frame); await attachJarvisCrawlerCore(frame); if (dtDataType == messages.DTDataType.DT_DT_TODAYGAMEDATA) { await onRightFrameLoadedGTDS(frame); } else if (dtDataType == messages.DTDataType.DT_DT_BUSINESSGAMEREPORT) { await onRightFrameLoadedGDR(frame); } else if (dtDataType == messages.DTDataType.DT_DT_GPKCHECKGAMERESULT) { await onRightFrameLoadedGPKCGR(frame); } } }); await attachJQuery(leftFrame); await attachJarvisCrawlerCore(leftFrame); // 标记需要的菜单元素 await leftFrame .evaluate(() => { const jlxx = getElementWithText('.title', '记录信息'); if (jlxx) { jlxx.className = 'title jlxx'; } const bbtj = getElementWithText('.title', '报表统计'); if (jlxx) { bbtj.className = 'title bbtj'; } const lstmenuson = $('.menuson'); for (let i = 0; i < lstmenuson.length; ++i) { const yxjl = getElementChildWithTagAndText( lstmenuson[i], 'A', '游戏记录', ); if (yxjl) { yxjl.className = 'yxjl'; lstmenuson[i].className = 'menuson jlxx'; } const gpkyxjl = getElementChildWithTagAndText( lstmenuson[i], 'A', 'GPK游戏记录', ); if (gpkyxjl) { gpkyxjl.className = 'gpkyxjl'; } const yxbb = getElementChildWithTagAndText( lstmenuson[i], 'A', '游戏报表', ); if (yxbb) { yxbb.className = 'yxbb'; lstmenuson[i].className = 'menuson bbtj'; } } }) .catch((err) => { log.error('dtbkbot:leftFrame.evaluate', err); }); if (dtDataType == messages.DTDataType.DT_DT_TODAYGAMEDATA) { ret = await getGameTodayDataSummary(page, leftFrame, rightFrame); } else if (dtDataType == messages.DTDataType.DT_DT_BUSINESSGAMEREPORT) { ret = await getGameDataReport( page, leftFrame, rightFrame, starttime, endtime, ); } else if (dtDataType == messages.DTDataType.DT_DT_GPKCHECKGAMERESULT) { ret = await checkGPKGameResult( page, leftFrame, rightFrame, waitRightFrame, businessid, gamecode, playername, starttime, endtime, ); } } if (!debugmode) { if (topFrame) { await topFrame.click('.logoutbtn'); // 等待登录加载完成 await page .waitForFunction(() => { const objs = document.getElementsByClassName('loginbox'); if (objs.length > 0) { return true; } return false; }) .catch((err) => { log.error('dtbkbot.logout.waitForFunction.loginbox', err); }); } await page.close(); } return ret; } exports.dtbkbot = dtbkbot;