| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- const Puppeteer = require('puppeteer');
- const sleep = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) };
- // 参数
- const ID = process.argv[2]
- const PWD = process.argv[3]
- const HOST = process.argv[4] || 'http://git.jdjinsui.com'
- const TIME = process.argv[5] || 10000
- // 登录
- const login = async (browser, ID, PWD, HOST) => {
- const page = await browser.newPage();
- await page.goto(`${HOST}/user/login`);
- await page.type('input', ID, { delay: 150 });
- await page.type('input[type="password"]', PWD, { delay: 100 });
- await page.click('button');
- await sleep(3000)
- const isLogin = page.url().includes('/user/login')
- if (isLogin) {
- page.close()
- console.error('账号密码错误:', ID);
- await login(browser, ID, PWD)
- }
- console.log(`${new Date().toLocaleString()}-${ID}:已登录`);
- }
- // 数据获取及同意
- const contrlData = async (browser, page, time) => {
- // 获取列表
- await sleep(1000)
- 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, '') })));
- await sleep(1000)
- // 循环同意变更
- for (let k = 0; k < list.length; k++) {
- const el = list[k];
- const newPage = await browser.newPage();
- await newPage.goto(el.href, { timeout: 0 })
- const state = await newPage.$$eval('.content>.segment button', async (divs, item) => {
- let who = ''
- for (let j = 0; j < divs.length; j++) {
- const es = divs[j];
- if (es.textContent.includes('合并请求')) {
- es.click()
- who = `${new Date().toLocaleString()}-${item.who}: 已自动合并`
- }
- }
- return who
- }, el)
- console.log(state);
- await sleep(1000)
- await newPage.close()
- }
- // reload
- await sleep(1000)
- page.reload()
- await sleep(time)
- await contrlData(browser, page, time)
- }
- // main
- (async () => {
- try {
- // init
- const browser = await Puppeteer.launch({
- headless: true,
- timeout: 0,
- defaultViewport: { width: 1920, height: 1080 },
- executablePath: './chrome/chrome.exe'
- });
- // login
- await login(browser, ID, PWD, HOST);
- // 获取数据
- const page = await browser.newPage();
- await page.goto(`${HOST}/pulls`, { timeout: 0 });
- await sleep(1000);
- // 操作数据
- await contrlData(browser, page, TIME)
- } catch (error) {
- console.error(error)
- process.exit(1)
- }
- })()
|