index.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const Puppeteer = require('puppeteer');
  2. const sleep = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) };
  3. const { components, unit} = require(process.cwd() + '/config.js');
  4. const fs = require('fs');
  5. // main
  6. (async () => {
  7. try {
  8. console.log('start px2rem...');
  9. // init
  10. const browser = await Puppeteer.launch({
  11. headless: true,
  12. timeout: 0,
  13. executablePath: process.cwd() + '/chrome/chrome.exe'
  14. });
  15. // 打开naive 官网
  16. const page = await browser.newPage();
  17. await page.goto(`https://www.naiveui.com/zh-CN/os-theme/docs/installation`);
  18. await sleep(1000)
  19. await page.click('div.n-element');
  20. const newArr = components.map(el => {
  21. const N = el.indexOf('N');
  22. if (N !== -1) el = el.substring(N + 1);
  23. return el
  24. })
  25. // 需要导出组件配置
  26. await sleep(1000)
  27. const objs = {}
  28. for (let zd = 0; zd < newArr.length; zd++) {
  29. const cname = newArr[zd]
  30. const values = await new Promise(async (resolve, reject) => {
  31. const input = await page.$('.n-popover__content>.n-space>div:nth-child(3) input');
  32. await input.click({ clickCount: 2 }); // 双击清空
  33. await input.type(cname, { delay: 100 });
  34. await page.$$eval('.n-popover__content>.n-space', (divs) => divs[0].children[2].children[0].children[0].children[0].children[0].blur())
  35. const keys = await page.$$eval('.n-collapse-item--left-arrow-placement', async (divs,unit) => {
  36. const obj = {}
  37. for (let k = 0; k < divs.length; k++) {
  38. const child = divs[k];
  39. child.children[0].children[0].click()
  40. await new Promise((resolve) => { setTimeout(resolve, 1000) })
  41. const list = child.children[1].children[0].children[0].children
  42. for (let j = 0; j < list.length; j++) {
  43. const es = list[j];
  44. const key = es.children[0].textContent
  45. const value = es.children[1].children[0].children[0].children[0].getAttribute('placeholder')
  46. if (value && value.includes('px')) {
  47. const arr = value.split(' ')
  48. const newValue = arr.map(el => el.includes('px') ? el = parseInt(el) / unit + 'rem' : el)
  49. obj[key] = newValue.join(' ')
  50. }
  51. }
  52. }
  53. return obj
  54. },unit)
  55. resolve(keys)
  56. })
  57. objs[cname] = values
  58. }
  59. // 输出json 数据
  60. const jsonContent = JSON.stringify(objs);
  61. fs.writeFile(process.cwd() + "/output.json", jsonContent, 'utf8', (err) => {
  62. if (err) return console.log("out data error");
  63. console.log("JSON file has been saved.");
  64. page.close()
  65. browser.close()
  66. process.exit(1)
  67. });
  68. } catch (error) {
  69. console.error(error)
  70. process.exit(1)
  71. }
  72. })()