保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
const events = require("./index");
const axios = require("axios");
const cheerio = require("cheerio");
const ora = require("ora");
const fs = require("fs");
 
const BASE_URL = "https://developer.mozilla.org/en-US/docs/Web/Events";
 
function parseText(val) {
  if (val.match(/Yes/)) {
    return true;
  } else if (val.match(/No/)) {
    return false;
  }
}
 
function getValue($, name) {
  const text = $("dt, td")
    .filter(function() {
      return $(this).text() === name;
    })
    .next()
    .text();
  return parseText(text);
}
 
function writeToFile(val) {
  fs.writeFileSync(
    require.resolve("./dom-event-types.json"),
    JSON.stringify(val, null, 2)
  );
}
 
const obj = { ...events };
 
async function getInfo(event) {
  let res;
  try {
    res = await axios.get(`${BASE_URL}/${event}`);
  } catch (err) {
    return;
  }
 
  const $ = cheerio.load(res.data);
 
  const bubblesVal = getValue($, "Bubbles");
  const cancelableVal = getValue($, "Cancelable");
 
  if (bubblesVal === undefined) {
    delete obj[event].bubbles;
  }
  if (cancelableVal === undefined) {
    delete obj[event].cancelable;
  }
}
 
(async () => {
  const spinner = ora("Scraping MDN").start();
  for (const event of Object.keys(events)) {
    await getInfo(event);
  }
  spinner.stop();
  console.log("Scraping complete");
  writeToFile(obj);
})();