index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const Puppeteer = require('puppeteer');
  2. const sleep = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) };
  3. // 参数
  4. const ID = process.argv[2]
  5. const PWD = process.argv[3]
  6. const TIME = process.argv[4] || 10000
  7. // 登录
  8. const login = async (browser, ID, PWD) => {
  9. const page = await browser.newPage();
  10. await page.goto('http://git.jdjinsui.com/user/login');
  11. await page.type('input', ID, { delay: 150 });
  12. await page.type('input[type="password"]', PWD, { delay: 100 });
  13. await page.click('button');
  14. await sleep(3000)
  15. const isLogin = page.url().includes('/user/login')
  16. if (isLogin) {
  17. page.close()
  18. console.error('账号密码错误:', ID);
  19. await login(browser, ID, PWD)
  20. }
  21. }
  22. // 数据获取及同意
  23. const contrlData = async (browser, page, time) => {
  24. // 获取列表
  25. await sleep(1000)
  26. 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, '') })));
  27. console.log(`${new Date().toLocaleString()}-清单:${JSON.stringify(list)}`);
  28. await sleep(1000)
  29. // 循环同意变更
  30. for (let k = 0; k < list.length; k++) {
  31. const el = list[k];
  32. const newPage = await browser.newPage();
  33. await newPage.goto(el.href, { timeout: 0 })
  34. const state = await newPage.$$eval('.content>.segment button', async (divs, item) => {
  35. let who = ''
  36. for (let j = 0; j < divs.length; j++) {
  37. const es = divs[j];
  38. if (es.textContent.includes('合并请求')) {
  39. es.click()
  40. who = item.who + ': 已合并'
  41. }
  42. }
  43. return who
  44. }, el)
  45. console.log(state);
  46. await sleep(1000)
  47. await newPage.close()
  48. }
  49. // reload
  50. await sleep(1000)
  51. page.reload()
  52. await sleep(time)
  53. await contrlData(browser, page, time)
  54. }
  55. // main
  56. (async () => {
  57. try {
  58. // init
  59. const browser = await Puppeteer.launch({
  60. headless: true,
  61. timeout: 0,
  62. defaultViewport: { width: 1920, height: 1080 },
  63. executablePath: './chrome/chrome.exe'
  64. });
  65. // login
  66. await login(browser, ID, PWD);
  67. // 获取数据
  68. const page = await browser.newPage();
  69. await page.goto('http://git.jdjinsui.com/pulls', { timeout: 0 });
  70. await sleep(1000);
  71. // 操作数据
  72. await contrlData(browser, page, TIME)
  73. } catch (error) {
  74. console.error(error)
  75. process.exit(1)
  76. }
  77. })()