index.js 2.7 KB

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