Compare commits
	
		
			No commits in common. "f531b1a30644dd53ffb76a7eb350b3f8f5de6c58" and "e422b908dc5c05a48e04899d04cbfd13073c39d0" have entirely different histories.
		
	
	
		
			f531b1a306
			...
			e422b908dc
		
	
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -3,5 +3,3 @@ node_modules/ | |||||||
| *.png | *.png | ||||||
| businessData.json | businessData.json | ||||||
| data/user.json | data/user.json | ||||||
| data/zhihu.json |  | ||||||
| data/zhihuData.json |  | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								.prettierrc
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								.prettierrc
									
									
									
									
									
								
							| @ -1,13 +0,0 @@ | |||||||
| { |  | ||||||
|   "printWidth": 100, |  | ||||||
|   "tabWidth": 4, |  | ||||||
|   "semi": true, |  | ||||||
|   "singleQuote": false, |  | ||||||
|   "quoteProps": "consistent", |  | ||||||
|   "trailingComma": "es5", |  | ||||||
|   "bracketSpacing": true, |  | ||||||
|   "arrowParens": "avoid", |  | ||||||
|   "proseWrap": "never", |  | ||||||
|   "endOfLine": "lf", |  | ||||||
|   "embeddedLanguageFormatting": "off" |  | ||||||
| } |  | ||||||
							
								
								
									
										24
									
								
								BusinessDataAnalysisSheet.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								BusinessDataAnalysisSheet.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | import { launch } from 'puppeteer'; | ||||||
|  | import 'dotenv/config.js' | ||||||
|  | 
 | ||||||
|  | (async () => { | ||||||
|  |     const browser = await launch({ headless: true, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } }); | ||||||
|  |     const page = await browser.newPage(); | ||||||
|  |     await page.setViewport({ width: 1920, height: 1080 }); | ||||||
|  |     await page.goto('https://dev-dmp.meiguanjia.net/report/businessData'); | ||||||
|  | 
 | ||||||
|  |     console.log(current); | ||||||
|  |     console.log(process.env.ACCOUNT); | ||||||
|  | 
 | ||||||
|  |     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);
 | ||||||
|  |     // await page.screenshot({ path: 'resetPassword.png' });
 | ||||||
|  |     console.log(arcoMessage); | ||||||
|  | 
 | ||||||
|  |     page.on('console', msg => { | ||||||
|  |         console.log('PAGE:', msg.text()) | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     await browser.close(); | ||||||
|  | })(); | ||||||
							
								
								
									
										207
									
								
								data/zhihu.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								data/zhihu.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,207 @@ | |||||||
|  | [ | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1722947938, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "__zse_ck", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "001_4GAjdIPApDlfoktrmr9xjL8uAYQHAcICZZSRr3DIWK2bqp4Bq/CuLHYwdYNdl/eklSstaHYiP0AJTNUBgHqtoJU+7WwKhbIWdceQ/pukPfHRIozZ3/AKy6Yb6zaKg3tC", | ||||||
|  |         "id": 1 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1756903138.09559, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "_xsrf", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "Vtmi0jwDJyVfhUfdHTVeLR16MLbuoqcX", | ||||||
|  |         "id": 2 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1751639986.575218, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "_zap", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "08b6a9a6-ffc7-4ee8-90a8-f7cba4165388", | ||||||
|  |         "id": 3 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1751639987.056828, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "d_c0", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "ACAfoAGQshiPTkU5aXH6DAjwlFi2TYokPrU=|1717079988", | ||||||
|  |         "id": 4 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": true, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "1722343511", | ||||||
|  |         "id": 5 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1753879511, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "1722082618,1722130658,1722151750,1722343139", | ||||||
|  |         "id": 6 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "HMACCOUNT", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": true, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "2D7CA8E84CD24E76", | ||||||
|  |         "id": 7 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1724935511, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "tst", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "h", | ||||||
|  |         "id": 8 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": ".zhihu.com", | ||||||
|  |         "expirationDate": 1737025782.444365, | ||||||
|  |         "hostOnly": false, | ||||||
|  |         "httpOnly": true, | ||||||
|  |         "name": "z_c0", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": true, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "2|1:0|10:1721473784|4:z_c0|80:MS4xTG9IdkJBQUFBQUFtQUFBQVlBSlZUZmpvaUdlZkxyaVRRb0NuNGw1b2JvZ0ZqNDA0eW9NUHV3PT0=|92f4651e6a267edb95be6b11b839e2546d91a0970768db8301bcac39a6eecac2", | ||||||
|  |         "id": 9 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": "www.zhihu.com", | ||||||
|  |         "expirationDate": 1748615987, | ||||||
|  |         "hostOnly": true, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "__snaker__id", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "fD9Cyd25ImUPIyJH", | ||||||
|  |         "id": 10 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": "www.zhihu.com", | ||||||
|  |         "expirationDate": 1722347111.96829, | ||||||
|  |         "hostOnly": true, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "BEC", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "6ff32b60f55255af78892ba1e551063a", | ||||||
|  |         "id": 11 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": "www.zhihu.com", | ||||||
|  |         "hostOnly": true, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "JOID", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": true, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "W1wUA0wmJxgWn4dVLS4UAgCbHuQ9XEhbYPT4ZX9dYGtS9sQVS3TDtnmcj1ErNsTNn23GyAfDQcki_FGhxhtiuBY=", | ||||||
|  |         "id": 12 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": "www.zhihu.com", | ||||||
|  |         "hostOnly": true, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "osd", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": true, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "U1AVBksuKxkTmI9ZLCsTCgyaG-M1UEleZ_z0ZHpaaGdT88MdR3XGsXGQjlQsPsjMmmrOxAbGRsEu_VSmzhdjvRE=", | ||||||
|  |         "id": 13 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": "www.zhihu.com", | ||||||
|  |         "expirationDate": 1751639999.367131, | ||||||
|  |         "hostOnly": true, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "q_c1", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": false, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "6755bb9e74ff466faa6b2d0ba240faf9|1717080000000|1717080000000", | ||||||
|  |         "id": 14 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "domain": "www.zhihu.com", | ||||||
|  |         "hostOnly": true, | ||||||
|  |         "httpOnly": false, | ||||||
|  |         "name": "SESSIONID", | ||||||
|  |         "path": "/", | ||||||
|  |         "sameSite": "unspecified", | ||||||
|  |         "secure": false, | ||||||
|  |         "session": true, | ||||||
|  |         "storeId": "0", | ||||||
|  |         "value": "wjBqer5SuJvEnMMcxO4MqOg0HjznYy14sqbhB66uWk1", | ||||||
|  |         "id": 15 | ||||||
|  |     } | ||||||
|  |     ] | ||||||
							
								
								
									
										38
									
								
								example.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								example.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | import { launch } from 'puppeteer'; | ||||||
|  | import 'dotenv/config.js' | ||||||
|  | 
 | ||||||
|  | (async () => { | ||||||
|  |     const browser = await launch({ headless: true, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } }); | ||||||
|  |     const page = await browser.newPage(); | ||||||
|  |     await page.setViewport({ width: 1920, height: 1080 }); | ||||||
|  |     const dev = 'https://dev-dmp.meiguanjia.net/login'; | ||||||
|  |     const stging = 'https://boss.aizhb.net/login'; | ||||||
|  |     let current = ''; | ||||||
|  |     if (process.env.PROFILE === 'dev') { | ||||||
|  |         current = dev; | ||||||
|  |     } else if (process.env.PROFILE === 'stging') { | ||||||
|  |         current = stging; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     console.log(current); | ||||||
|  |     console.log(process.env.ACCOUNT); | ||||||
|  |     await page.goto(current); | ||||||
|  |     await page.locator('#userName input').fill(process.env.ACCOUNT); | ||||||
|  |     await page.locator('.forgot_box').click(); | ||||||
|  |     await page.waitForSelector('.modify_main'); | ||||||
|  |     await page.locator('#digitalCode input').fill('1'); | ||||||
|  |     await page.locator('#smsCode input').fill(process.env.SMS); | ||||||
|  |     await page.locator('#newPassWord input').fill(process.env.PASSWORD); | ||||||
|  |     await page.locator('#confirmPassWord input').fill(process.env.PASSWORD); | ||||||
|  |     await page.locator('[type="submit"]').click(); | ||||||
|  |     await page.waitForSelector('.arco-message .arco-message-content', { visible: true }); | ||||||
|  |     const arcoMessage = await page.$eval('.arco-message .arco-message-content', node => node.innerHTML); | ||||||
|  |     await page.screenshot({ path: 'resetPassword.png' }); | ||||||
|  |     console.log(arcoMessage); | ||||||
|  | 
 | ||||||
|  |     page.on('console', msg => { | ||||||
|  |         console.log('PAGE:', msg.text()) | ||||||
|  |       }) | ||||||
|  | 
 | ||||||
|  |     await browser.close(); | ||||||
|  | })(); | ||||||
							
								
								
									
										43
									
								
								example2.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								example2.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | 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'; | ||||||
|  | 
 | ||||||
|  | (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/businessData'); | ||||||
|  |     // 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[1].click(); | ||||||
|  |     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 getDate(page, fs, file); | ||||||
|  |     console.log('========'); | ||||||
|  | 
 | ||||||
|  |     await cleanType(page, '.arco-picker-start-time', '2024-06'); | ||||||
|  |     await getDate(page, fs, file); | ||||||
|  |     console.log('========'); | ||||||
|  | 
 | ||||||
|  |     await cleanType(page, '.arco-picker-start-time', '2024-05'); | ||||||
|  |     await getDate(page, fs, file); | ||||||
|  |     console.log('========'); | ||||||
|  | 
 | ||||||
|  |     await cleanType(page, '.arco-picker-start-time', '2024-04'); | ||||||
|  |     await getDate(page, fs, file); | ||||||
|  |     console.log('========'); | ||||||
|  | 
 | ||||||
|  |     await browser.close(); | ||||||
|  | })(); | ||||||
| @ -1,66 +0,0 @@ | |||||||
| import { launch } from "puppeteer"; |  | ||||||
| import "dotenv/config.js"; |  | ||||||
| import { injectionCookie } from "../utils/userUtils.js"; |  | ||||||
| import fs from "fs"; |  | ||||||
| import dotenv from "dotenv"; |  | ||||||
| dotenv.config(); |  | ||||||
| 
 |  | ||||||
| (async () => { |  | ||||||
|     const browser = await launch({ |  | ||||||
|         headless: false, |  | ||||||
|         args: [`--window-size=1920,1080`], |  | ||||||
|         defaultViewport: { width: 1920, height: 1080 }, |  | ||||||
|     }); |  | ||||||
|     const page = await browser.newPage(); |  | ||||||
|     page.on("console", msg => console.log("PAGE LOG", msg.text())); |  | ||||||
|     page.on("error", error => console.error("PAGE error", error)); |  | ||||||
| 
 |  | ||||||
|     // 注入cookie
 |  | ||||||
|     const webUrl = "https://www.zhihu.com/hot"; |  | ||||||
|     const cookieFileUrl = "./data/zhihu.json"; |  | ||||||
|     await injectionCookie(page, webUrl, cookieFileUrl); |  | ||||||
| 
 |  | ||||||
|     const hotItems = await page.$$(".HotList-list .HotItem"); |  | ||||||
| 
 |  | ||||||
|     const hotText = new Array(); |  | ||||||
| 
 |  | ||||||
|     for (const hot in hotItems) { |  | ||||||
|         if (Object.hasOwnProperty.call(hotItems, hot)) { |  | ||||||
|             const element = hotItems[hot]; |  | ||||||
| 
 |  | ||||||
|             const h2Element = await element.$("h2"); |  | ||||||
|             const pElement = await element.$("p"); |  | ||||||
| 
 |  | ||||||
|             const title = h2Element != null ? await h2Element.evaluate(e => e.textContent) : ""; |  | ||||||
|             const excerpt = pElement != null ? await pElement.evaluate(e => e.textContent) : ""; |  | ||||||
|             const createTime = Date.now(); |  | ||||||
|             hotText.push({ title, excerpt, createTime }); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     fs.writeFileSync("./data/zhihuData.json", JSON.stringify(hotText, null, 2)); |  | ||||||
| 
 |  | ||||||
|     const url = process.env.URL; |  | ||||||
|     console.log(process.env.URL); |  | ||||||
| 
 |  | ||||||
|     try { |  | ||||||
|         const response = await fetch(url, { |  | ||||||
|             method: "POST", |  | ||||||
|             headers: { |  | ||||||
|                 "Content-Type": "application/json", |  | ||||||
|             }, |  | ||||||
|             body: JSON.stringify(hotText, null, 2), |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         if (!response.ok) { |  | ||||||
|             throw new Error(`Http error! status : ${response.status}`); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         const responseData = await response.json(); |  | ||||||
|         console.log("Repsonse data", responseData); |  | ||||||
|     } catch (error) { |  | ||||||
|         console.error(error); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     await browser.close(); |  | ||||||
| })(); |  | ||||||
							
								
								
									
										29
									
								
								login.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								login.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | import { launch } from 'puppeteer'; | ||||||
|  | import fs from 'fs'; | ||||||
|  | import 'dotenv/config.js'; | ||||||
|  | 
 | ||||||
|  | (async () => { | ||||||
|  |     const browser = await launch({ headless: false, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } }); | ||||||
|  |     const page = await browser.newPage(); | ||||||
|  |     await page.goto('https://dev-dmp.meiguanjia.net/login'); | ||||||
|  |     // await page.goto('https://boss.aizhb.net/login');
 | ||||||
|  |     await page.locator('#userName input').fill(process.env.ACCOUNT); | ||||||
|  |     await page.locator('#passWord input').fill(process.env.PASSWORD); | ||||||
|  |     await page.locator('[type="submit"]').click(); | ||||||
|  | 
 | ||||||
|  |     await page.waitForSelector('.arco-message .arco-message-content', { visible: true }); | ||||||
|  |     const arcoMessage = await page.$eval('.arco-message .arco-message-content', node => node.innerHTML); | ||||||
|  |     console.log(arcoMessage); | ||||||
|  | 
 | ||||||
|  |     await new Promise(r => setTimeout(r, 1000)); | ||||||
|  |     const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage)); | ||||||
|  | 
 | ||||||
|  |     const importStorage = JSON.stringify(localStorage); | ||||||
|  |     const file = './data/user.json'; | ||||||
|  |     if (!fs.existsSync('./data/')) { | ||||||
|  |         fs.mkdirSync('./data/'); | ||||||
|  |         console.log('文件夹不存在,创建文件夹'); | ||||||
|  |     } | ||||||
|  |     fs.writeFileSync(file, importStorage, 'utf-8'); | ||||||
|  |     await browser.close(); | ||||||
|  | })(); | ||||||
							
								
								
									
										17
									
								
								uselogin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								uselogin.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { launch } from 'puppeteer'; | ||||||
|  | import fs from 'fs'; | ||||||
|  | import 'dotenv/config.js'; | ||||||
|  | 
 | ||||||
|  | import { setLocalStorage } from './utils/userUtils.js'; | ||||||
|  | 
 | ||||||
|  | (async () => { | ||||||
|  |     const browser = await launch({ headless: false, devtools: true, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080 } }); | ||||||
|  |     const page = await browser.newPage(); | ||||||
|  |     await page.goto('https://dev-dmp.meiguanjia.net/login'); | ||||||
|  | 
 | ||||||
|  |     await setLocalStorage(page, 'user.json'); | ||||||
|  | 
 | ||||||
|  |     await page.goto('https://dev-dmp.meiguanjia.net/report/businessData'); | ||||||
|  | 
 | ||||||
|  |     await browser.close(); | ||||||
|  | })(); | ||||||
							
								
								
									
										55
									
								
								utils/businessDataUtil.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								utils/businessDataUtil.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | export async function getDate(page, fs, file) { | ||||||
|  |     await new Promise(r => setTimeout(r, 2000)); | ||||||
|  |     await page.waitForSelector('.ai_custome'); | ||||||
|  |     const aiCustome = await page.$$('.ai_custome .ai_custome_item .amount'); | ||||||
|  |     let ai = new Set(); | ||||||
|  |     for (const e of aiCustome) { | ||||||
|  |         let str = await page.evaluate(element => element.textContent, e); | ||||||
|  |         ai.add(str); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     let importStorage = '\n' + JSON.stringify(Array.from(ai), null, 2) + '\n'; | ||||||
|  |     fs.appendFileSync(file, importStorage, 'utf-8'); | ||||||
|  | 
 | ||||||
|  |     const elementHandle = await page.waitForSelector('.bi_warp iframe'); | ||||||
|  |     const frame = await elementHandle.contentFrame(); | ||||||
|  |     await frame.waitForSelector('#label-content'); | ||||||
|  |     const items = await frame.$$('#label-content'); // Use $$ to get all matching elements
 | ||||||
|  |     let its = new Set(); | ||||||
|  |     if (items.length > 0) { // Check if items array is not empty
 | ||||||
|  |         for (const e of items) { | ||||||
|  |             let str = await frame.evaluate(element => element.textContent, e); // Use frame.evaluate() here
 | ||||||
|  |             its.add(str.replace(/\s+/g, ' ')); | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         console.log('#label-content not found in the iframe'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     importStorage = JSON.stringify(Array.from(its), null, 2) + '\n'; | ||||||
|  |     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 }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export async function changeTimeDimension(page, timeDimension) { | ||||||
|  |     let rb = await page.$('.arco-space-item .arco-select-view-value'); | ||||||
|  |     let s = await page.evaluate(node => node.textContent.trim(), rb); | ||||||
|  |     console.log(s); | ||||||
|  | 
 | ||||||
|  |     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) | ||||||
|  |         console.log(s); | ||||||
|  |         timeMap.set(s, iterator); | ||||||
|  |     } | ||||||
|  |     console.log('==='); | ||||||
|  |     console.log(timeMap); | ||||||
|  | 
 | ||||||
|  |     await timeMap.get(timeDimension).click(); | ||||||
|  | } | ||||||
| @ -1,38 +1,20 @@ | |||||||
| import fs from "fs"; | import fs from 'fs'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * 设置页面的LocalStorage |  * 设置页面的LocalStorage | ||||||
|  * @param {import('puppeteer').Page} page |  * @param {*} page  | ||||||
|  * @param {String} file 用户信息 |  * @param {String} file 用户信息 | ||||||
|  */ |  */ | ||||||
| export async function setLocalStorage(page, file) { | export async function setLocalStorage(page, file) { | ||||||
|     const outputLocalStorge = fs.readFileSync(file, "utf-8"); |     const outputLocalStorge = fs.readFileSync(file, 'utf-8'); | ||||||
|     let localStorageTest = JSON.parse(outputLocalStorge); |     let localStorageTest = JSON.parse(outputLocalStorge); | ||||||
| 
 | 
 | ||||||
|     // 设置页面的localStorage
 |     // 设置页面的localStorage
 | ||||||
|     await page.evaluateOnNewDocument(localStorageTest => { |     await page.evaluateOnNewDocument(localStorageTest => { | ||||||
|         localStorage.clear(); |         localStorage.clear(); | ||||||
|         localStorage.setItem("merchant_access_token", localStorageTest.merchant_access_token); |         localStorage.setItem('merchant_access_token', localStorageTest.merchant_access_token); | ||||||
|         localStorage.setItem("merchant_refresh_token", localStorageTest.merchant_refresh_token); |         localStorage.setItem('merchant_refresh_token', localStorageTest.merchant_refresh_token); | ||||||
|         localStorage.setItem("merchant_login_data", localStorageTest.merchant_login_data); |         localStorage.setItem('merchant_login_data', localStorageTest.merchant_login_data); | ||||||
|         localStorage.setItem("merchant_metadata_data", localStorageTest.merchant_metadata_data); |         localStorage.setItem('merchant_metadata_data', localStorageTest.merchant_metadata_data); | ||||||
|     }, localStorageTest); |     }, localStorageTest); | ||||||
| 
 |  | ||||||
|     console.log("set success"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @param {Page} page |  | ||||||
|  * @param {String} webUrl 网站 |  | ||||||
|  * @param {String} cookieFile cookie地址Url |  | ||||||
|  */ |  | ||||||
| export async function injectionCookie(page, webUrl, cookieFile) { |  | ||||||
|     try { |  | ||||||
|         await page.goto(webUrl); |  | ||||||
|         const cookies = JSON.parse(fs.readFileSync(cookieFile, "utf-8")); |  | ||||||
|         await page.setCookie(...cookies); |  | ||||||
|         await page.goto(webUrl); |  | ||||||
|     } catch (error) { |  | ||||||
|         console.error(error); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user