| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- const Puppeteer = require('puppeteer');
- const sleep = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) };
- const { components, unit} = require(process.cwd() + '/config.js');
- const fs = require('fs');
- // main
- (async () => {
- try {
- console.log('start px2rem...');
- // init
- const browser = await Puppeteer.launch({
- headless: true,
- timeout: 0,
- executablePath: process.cwd() + '/chrome/chrome.exe'
- });
- // 打开naive 官网
- const page = await browser.newPage();
- await page.goto(`https://www.naiveui.com/zh-CN/os-theme/docs/installation`);
- await sleep(1000)
- await page.click('div.n-element');
- const newArr = components.map(el => {
- const N = el.indexOf('N');
- if (N !== -1) el = el.substring(N + 1);
- return el
- })
- // 需要导出组件配置
- await sleep(1000)
- const objs = {}
- for (let zd = 0; zd < newArr.length; zd++) {
- const cname = newArr[zd]
- const values = await new Promise(async (resolve, reject) => {
- const input = await page.$('.n-popover__content>.n-space>div:nth-child(3) input');
- await input.click({ clickCount: 2 }); // 双击清空
- await input.type(cname, { delay: 100 });
- await page.$$eval('.n-popover__content>.n-space', (divs) => divs[0].children[2].children[0].children[0].children[0].children[0].blur())
- const keys = await page.$$eval('.n-collapse-item--left-arrow-placement', async (divs,unit) => {
- const obj = {}
- for (let k = 0; k < divs.length; k++) {
- const child = divs[k];
- child.children[0].children[0].click()
- await new Promise((resolve) => { setTimeout(resolve, 1000) })
- const list = child.children[1].children[0].children[0].children
- for (let j = 0; j < list.length; j++) {
- const es = list[j];
- const key = es.children[0].textContent
- const value = es.children[1].children[0].children[0].children[0].getAttribute('placeholder')
- if (value && value.includes('px')) {
- const arr = value.split(' ')
- const newValue = arr.map(el => el.includes('px') ? el = parseInt(el) / unit + 'rem' : el)
- obj[key] = newValue.join(' ')
- }
- }
- }
- return obj
- },unit)
- resolve(keys)
- })
- objs[cname] = values
- }
- // 输出json 数据
- const jsonContent = JSON.stringify(objs);
- fs.writeFile(process.cwd() + "/output.json", jsonContent, 'utf8', (err) => {
- if (err) return console.log("out data error");
- console.log("JSON file has been saved.");
- page.close()
- browser.close()
- process.exit(1)
- });
- } catch (error) {
- console.error(error)
- process.exit(1)
- }
- })()
|