Open AnnVoV opened 5 years ago
1.先找到预定会议室的接口,一般需要登录认证,看需要哪个cookie 2.退出登录,重新登录,看set-cookie 是在哪个response 里给的 3.如果入参没有什么加密的东西,比较简单的话那么直接通过这个接口发请求就可以了 4.如果入参比较复杂,自己比较难构造,那就使用puppeteer 模拟登录行为,最终拿到cookie
const request = require('request-promise-native'); const puppeteer = require('puppeteer'); const fakeLogin = async () => { const url = 'http://it.netease.com/meeting/index.html'; const browser = await puppeteer.launch({}); const page = await browser.newPage(); await page.goto(url); await page.waitFor(1000); await page.type('#corp_id_for_corpid', 'name'); await page.type('#corp_id_for_corppw', 'pass'); await page.waitFor(1000); await page.click('#corp button'); await page.waitFor(1000); await page.goto('http://it.netease.com/portal/security/getCurrentUserInfo.du'); await page.waitFor(1000); return page.cookies(); }; async function setOrder(Cookie) { function getOrderDate() { const date = new Date(); const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); const fullSet = (val) => { return (val > 10) ? val : `0${val}`; }; return `${year}-${fullSet(month)}-${fullSet(day)}`; } const date = getOrderDate(); const options = { method: 'POST', uri: 'http://it.netease.com/portal/meeting/insertMeeting.du', headers: { Cookie, }, body: { "subject": "code review", "content": "今天看谁的代码^_^", "meetingMembers": [ { "attendUser": "ann", "attendUsername": "ann", }, ], "sendPopoNow": true, "sendMailNow": false, "sendPopo": true, "sendMail": false, "roomId": 171, "location": "杭州-大厦", "roomName": "B楼-3F-No.xxx", "meetingTimelines": [ { date, "start": 17, "end": 19, }, ], }, json: true, }; try { const rsData = await request(options); console.log(rsData); } catch (err) { console.log(err); } } module.exports = function () { fakeLogin() .then((cookieArr) => { const cookieObj = cookieArr[0]; const cookieStr = `${cookieObj.name}=${cookieObj.value}`; setOrder(cookieStr); }); };
// 定时任务 const schedule = require('node-schedule'); const task = require('./meeting'); // 定义规则 let rule = new schedule.RecurrenceRule(); rule.dayOfWeek = 5; rule.hour = 9; rule.minute = 0; rule.second = 0; // 每周五早上9点执行任务 let job = schedule.scheduleJob(rule, () => { task(); });
{ "scripts": { "start": "node schedule.js 2>&1 > ./logs &", }, }
思路
1.先找到预定会议室的接口,一般需要登录认证,看需要哪个cookie 2.退出登录,重新登录,看set-cookie 是在哪个response 里给的 3.如果入参没有什么加密的东西,比较简单的话那么直接通过这个接口发请求就可以了 4.如果入参比较复杂,自己比较难构造,那就使用puppeteer 模拟登录行为,最终拿到cookie
puppeteer + node-schedule
执行