fix
This commit is contained in:
parent
b3f96ddddd
commit
1f315fe199
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,3 +3,4 @@ node_modules/
|
|||||||
*.png
|
*.png
|
||||||
businessData.json
|
businessData.json
|
||||||
data/user.json
|
data/user.json
|
||||||
|
data/technicianReport.json
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import 'dotenv/config.js'
|
|||||||
|
|
||||||
console.log(current);
|
console.log(current);
|
||||||
console.log(process.env.ACCOUNT);
|
console.log(process.env.ACCOUNT);
|
||||||
|
a
|
||||||
const item = await page.$eval('.item.cur', node=>node.innerHTML);
|
const item = await page.$eval('.item.cur', node=>node.innerHTML);
|
||||||
console.log(item);
|
console.log(item);
|
||||||
// const arcoMessage = await page.$eval('.arco-message .arco-message-content', node => node.innerHTML);
|
// const arcoMessage = await page.$eval('.arco-message .arco-message-content', node => node.innerHTML);
|
||||||
|
|||||||
30
TechnicianContributionAnalysisSheet.js
Normal file
30
TechnicianContributionAnalysisSheet.js
Normal file
@ -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();
|
||||||
|
})();
|
||||||
@ -2,7 +2,8 @@ import { launch } from 'puppeteer';
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import 'dotenv/config.js'
|
import 'dotenv/config.js'
|
||||||
import { setLocalStorage } from './utils/userUtils.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 () => {
|
(async () => {
|
||||||
const browser = await launch({ headless: true, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } });
|
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]);
|
const str = await page.evaluate(node => node.textContent.trim(), childElements[1]);
|
||||||
console.log(str);
|
console.log(str);
|
||||||
|
|
||||||
// await changeTimeDimension(page, '周报');
|
|
||||||
|
|
||||||
const file = './data/businessData.json';
|
const file = './data/businessData.json';
|
||||||
|
|
||||||
fs.writeFileSync(file, '', 'utf-8');
|
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);
|
await getDate(page, fs, file);
|
||||||
console.log('========');
|
console.log('========');
|
||||||
|
|
||||||
|
|||||||
@ -51,37 +51,4 @@ export async function getDate(page, fs, file) {
|
|||||||
|
|
||||||
const importStorage = JSON.stringify(convert, null, 2);
|
const importStorage = JSON.stringify(convert, null, 2);
|
||||||
fs.appendFileSync(file, importStorage, 'utf-8');
|
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();
|
|
||||||
}
|
}
|
||||||
80
utils/commnUtils.js
Normal file
80
utils/commnUtils.js
Normal file
@ -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');
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user