index.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. const Puppeteer = require('puppeteer');
  2. const sleep = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) };
  3. const log4js = require("log4js");
  4. // 日志配置
  5. log4js.configure({
  6. appenders: { logs: { type: "file", filename: "./logs.log" } },
  7. categories: { default: { appenders: ["logs"], level: "debug" } }
  8. });
  9. const logger = log4js.getLogger('logs');
  10. const ID = process.argv[2]
  11. const PWD = process.argv[3]
  12. const TIME = process.argv[4]
  13. // 获取数据
  14. const getData = async (browser, page, time) => {
  15. await sleep(1000)
  16. // 获取列表
  17. const list = await page.$$eval('.has-emoji', divs => divs.map(divs => ({ label: divs.textContent, href: divs.href, who: divs.parentNode.lastElementChild.textContent.replace(/[\'\"\\\/\b\f\n\r\t]/g, '') })));
  18. logger.debug(`${new Date().toLocaleDateString()}清单:${JSON.stringify(list)}`);
  19. await sleep(1000)
  20. // 循环同意变更
  21. for (let k = 0; k < list.length; k++) {
  22. const el = list[k];
  23. const newPage = await browser.newPage();
  24. await newPage.goto(el.href, { timeout: 0 })
  25. await newPage.$$eval('.content>.segment button', async (divs) => {
  26. const sleepd = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) }
  27. for (let j = 0; j < divs.length; j++) {
  28. const es = divs[j];
  29. if (es.textContent.includes('合并请求')) {
  30. es.click()
  31. await sleepd(1000)
  32. }
  33. }
  34. })
  35. await sleep(1000)
  36. newPage.close()
  37. }
  38. // reload
  39. await sleep(1000)
  40. page.reload()
  41. console.log('清单', list);
  42. await sleep(time)
  43. getData(browser, page, time)
  44. }
  45. (async () => {
  46. // init
  47. const browser = await Puppeteer.launch({
  48. headless: true,
  49. timeout: 0,
  50. defaultViewport: { width: 1920, height: 1080 },
  51. // executablePath:'./chrome/chrome.exe' //无浏览器可以不启用
  52. });
  53. // login
  54. const page = await browser.newPage();
  55. const tab = await page.goto('http://git.jdjinsui.com/pulls');
  56. const isLogin = tab.url().includes('/user/login');
  57. if (isLogin) {
  58. await page.type('input', ID, { delay: 150 });
  59. await page.type('input[type="password"]', PWD, { delay: 100 });
  60. await page.click('button');
  61. }
  62. await getData(browser, page, Number(TIME))
  63. })()