From 1f315fe19972ac6753393f5c698ac7fa4c4851b1 Mon Sep 17 00:00:00 2001 From: wenpeng Date: Fri, 2 Aug 2024 14:31:49 +0800 Subject: [PATCH] fix --- .gitignore | 1 + BusinessDataAnalysisSheet.js | 2 +- TechnicianContributionAnalysisSheet.js | 30 ++++++++++ example2.js | 7 +-- utils/businessDataUtil.js | 33 ----------- utils/commnUtils.js | 80 ++++++++++++++++++++++++++ 6 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 TechnicianContributionAnalysisSheet.js create mode 100644 utils/commnUtils.js diff --git a/.gitignore b/.gitignore index ebf6dfa..119264c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules/ *.png businessData.json data/user.json +data/technicianReport.json diff --git a/BusinessDataAnalysisSheet.js b/BusinessDataAnalysisSheet.js index ceb5df0..bab08d4 100644 --- a/BusinessDataAnalysisSheet.js +++ b/BusinessDataAnalysisSheet.js @@ -9,7 +9,7 @@ import 'dotenv/config.js' console.log(current); console.log(process.env.ACCOUNT); - +a const item = await page.$eval('.item.cur', node=>node.innerHTML); console.log(item); // const arcoMessage = await page.$eval('.arco-message .arco-message-content', node => node.innerHTML); diff --git a/TechnicianContributionAnalysisSheet.js b/TechnicianContributionAnalysisSheet.js new file mode 100644 index 0000000..6a29cad --- /dev/null +++ b/TechnicianContributionAnalysisSheet.js @@ -0,0 +1,30 @@ +import { launch } from 'puppeteer'; +import fs from 'fs'; +import 'dotenv/config.js' +import { setLocalStorage } from './utils/userUtils.js'; +import { setMonthTime, getDate, changeTimeDimension } from './utils/commnUtils.js' + +(async () => { + const browser = await launch({ headless: false, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } }); + const page = await browser.newPage(); + setLocalStorage(page, '.\\data\\user.json'); + await page.goto('https://dev-dmp.meiguanjia.net/report/technicianReport'); + // await page.goto('https://boss.aizhb.net/report/businessData'); + + await page.waitForSelector('.menu-list-second'); + const childElements = await page.$$('.menu-list-second .menu-list-second-item'); + await new Promise(r => setTimeout(r, 1000)); + await childElements[2].click(); + const str = await page.evaluate(node => node.textContent.trim(), childElements[2]); + console.log(str); + + const file = './data/technicianReport.json'; + + fs.writeFileSync(file, '', 'utf-8'); + + await changeTimeDimension(page, 2); + await setMonthTime(page, '.arco-picker-start-time', '2024-05'); + await getDate(page, fs, file); + + await browser.close(); +})(); \ No newline at end of file diff --git a/example2.js b/example2.js index f783cf8..023d95c 100644 --- a/example2.js +++ b/example2.js @@ -2,7 +2,8 @@ import { launch } from 'puppeteer'; import fs from 'fs'; import 'dotenv/config.js' import { setLocalStorage } from './utils/userUtils.js'; -import { getDate, cleanType, changeTimeDimension } from './utils/businessDataUtil.js'; +import { getDate } from './utils/businessDataUtil.js'; +import { setMonthTime } from './utils/commnUtils.js' (async () => { const browser = await launch({ headless: true, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } }); @@ -18,13 +19,11 @@ import { getDate, cleanType, changeTimeDimension } from './utils/businessDataUti const str = await page.evaluate(node => node.textContent.trim(), childElements[1]); console.log(str); - // await changeTimeDimension(page, '周报'); - const file = './data/businessData.json'; fs.writeFileSync(file, '', 'utf-8'); - await cleanType(page, '.arco-picker-start-time', '2024-05'); + await setMonthTime(page, '.arco-picker-start-time', '2024-05'); await getDate(page, fs, file); console.log('========'); diff --git a/utils/businessDataUtil.js b/utils/businessDataUtil.js index a7dd0a5..95eab0e 100644 --- a/utils/businessDataUtil.js +++ b/utils/businessDataUtil.js @@ -51,37 +51,4 @@ export async function getDate(page, fs, file) { const importStorage = JSON.stringify(convert, null, 2); fs.appendFileSync(file, importStorage, 'utf-8'); -} - -export async function cleanType(page, element, timeContent) { - const time = await page.$(element); - await time.click({ clickCount: 3 }); - await time.type(timeContent, { delay: 100 }); -} - -/** - * - * @param {Page} page - * @param {Number} dismensionNumber - */ -export async function changeTimeDimension(page, dismensionNumber) { - const timeDimension = [ - '日报', - '周报', - '月报', - '自定义' - ]; - - let rb = await page.$('.arco-space-item .arco-select-view-value'); - let s = await page.evaluate(node => node.textContent.trim(), rb); - - await rb.click(); - const timeMap = new Map(); - rb = await page.$$('.arco-select-dropdown-list .arco-select-option'); - for (const iterator of rb) { - s = await page.evaluate(node => node.textContent.trim(), iterator) - timeMap.set(s, iterator); - } - - await timeMap.get(timeDimension[dismensionNumber]).click(); } \ No newline at end of file diff --git a/utils/commnUtils.js b/utils/commnUtils.js new file mode 100644 index 0000000..95efd2c --- /dev/null +++ b/utils/commnUtils.js @@ -0,0 +1,80 @@ +/** + * 设置月报时间 + * @param {Page} page + * @param {String} element + * @param {String} timeContent + */ +export async function setMonthTime(page, element, timeContent) { + await new Promise(r => setTimeout(r, 2000)); + const time = await page.$(element); + await time.click({ clickCount: 3 }); + await time.type(timeContent, { delay: 100 }); +} + +/** + * + * @param {Page} page + * @param {Number} dismensionNumber + */ +export async function changeTimeDimension(page, dismensionNumber) { + const timeDimension = [ + '日报', + '周报', + '月报', + '自定义' + ]; + + let rb = await page.$('.arco-space-item .arco-select-view-value'); + let s = await page.evaluate(node => node.textContent.trim(), rb); + + await rb.click(); + const timeMap = new Map(); + rb = await page.$$('.arco-select-dropdown-list .arco-select-option'); + for (const iterator of rb) { + s = await page.evaluate(node => node.textContent.trim(), iterator) + timeMap.set(s, iterator); + } + console.log(timeDimension[dismensionNumber]); + await timeMap.get(timeDimension[dismensionNumber]).click(); +} + +/** + * + * @param {Page} page + * @param {fs} fs + * @param {String} file 存储文件位置 + */ +export async function getDate(page, fs, file) { + const its = new Map(); + + await new Promise(r => setTimeout(r, 2000)); + + const elementHandle = await page.waitForSelector('.bi_warp iframe'); + const frame = await elementHandle.contentFrame(); + await frame.waitForSelector('#label-content'); + const items = await frame.$$('#label-content'); + + if (items.length > 0) { + for (const e of items) { + const key = await e.$('span p'); + const value = await e.$('span span'); + const keyStr = await frame.evaluate(element => element.textContent.trim(), key); + const valueStr = await frame.evaluate(element => element.textContent.trim(), value); + + its.set(keyStr, valueStr); + } + } else { + console.log('#label-content not found in the iframe'); + } + + const convert = {}; + + for (const [key, value] of its) { + convert[key] = value; + } + + console.log(convert); + + const importStorage = JSON.stringify(convert, null, 2); + fs.appendFileSync(file, importStorage, 'utf-8'); +} \ No newline at end of file