initial commit
commit
00ba019cdc
@ -0,0 +1,3 @@
|
|||||||
|
chrome_cache*
|
||||||
|
node_modules
|
||||||
|
.idea
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
FROM ubuntu
|
||||||
|
|
||||||
|
RUN apt update
|
||||||
|
|
||||||
|
apt install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev cron curl
|
||||||
|
|
||||||
|
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
|
||||||
|
apt-get install -y nodejs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
npm i puppeteer node-fetch@2.6.1
|
||||||
@ -0,0 +1,511 @@
|
|||||||
|
const puppeteer = require('puppeteer');
|
||||||
|
const fs = require("fs")
|
||||||
|
const iPhonex = puppeteer.devices['iPhone X'];
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
|
||||||
|
// const RND_SLEEP_PAD_MAX = 10;
|
||||||
|
const RND_SLEEP_PAD_MAX = 1;
|
||||||
|
const MAIN_URL = 'https://rewards.bing.com/?lang=en-US';
|
||||||
|
|
||||||
|
let sleep = (sec) => {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, sec * 1000));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function rndSleep(sec, pad = null) {
|
||||||
|
if (!pad)
|
||||||
|
pad = Math.random() * RND_SLEEP_PAD_MAX;
|
||||||
|
await sleep(sec + pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
let rndSample = (arr, n) => {
|
||||||
|
const shuffled = arr.sort(() => 0.5 - Math.random());
|
||||||
|
return shuffled.slice(0, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
let shuffleArray = (array) => {
|
||||||
|
for (let i = array.length - 1; i > 0; i--) {
|
||||||
|
const j = Math.floor(Math.random() * (i + 1));
|
||||||
|
[array[i], array[j]] = [array[j], array[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = class BingAuto2 {
|
||||||
|
constructor(id, pw, headless) {
|
||||||
|
this.id = id;
|
||||||
|
this.pw = pw;
|
||||||
|
this.headless = headless;
|
||||||
|
this.browser = null;
|
||||||
|
this.mainPage = null;
|
||||||
|
this.keywords = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async startBrowser() {
|
||||||
|
let id = this.id.split('@')[0];
|
||||||
|
let tmp_dir = './chrome_cache_' + id;
|
||||||
|
if (!fs.existsSync(tmp_dir))
|
||||||
|
fs.mkdirSync(tmp_dir);
|
||||||
|
|
||||||
|
// await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36');
|
||||||
|
|
||||||
|
let option = {
|
||||||
|
headless: this.headless,
|
||||||
|
userDataDir: tmp_dir,
|
||||||
|
args: ["--proxy-server='direct://'", '--proxy-bypass-list=*', '--disable-site-isolation-trials']
|
||||||
|
};
|
||||||
|
|
||||||
|
this.browser = await puppeteer.launch(option);
|
||||||
|
|
||||||
|
// await browser.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
async close() {
|
||||||
|
this.browser.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
async newPage(agent = 'chrome') {
|
||||||
|
let browser = this.browser;
|
||||||
|
|
||||||
|
const page = await browser.newPage();
|
||||||
|
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36');
|
||||||
|
// await page.setCacheEnabled(false);
|
||||||
|
// await page.setDefaultNavigationTimeout(0);
|
||||||
|
if (agent === 'mobile')
|
||||||
|
await page.emulate(iPhonex);
|
||||||
|
else
|
||||||
|
await page.setViewport({height: 900, width: 1200});
|
||||||
|
|
||||||
|
if (agent === 'edge') {
|
||||||
|
await page.setUserAgent('"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/83.0.2704.79 Safari/537.36 Edge/14.14931"')
|
||||||
|
}
|
||||||
|
|
||||||
|
await page.goto(MAIN_URL);
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
async newMainPage(login = true) {
|
||||||
|
this.mainPage = await this.newPage();
|
||||||
|
if (login)
|
||||||
|
await sleep(1);
|
||||||
|
await this.login();
|
||||||
|
}
|
||||||
|
|
||||||
|
async login() {
|
||||||
|
let page = this.mainPage;
|
||||||
|
let elem, elems;
|
||||||
|
await page.waitForSelector('body');
|
||||||
|
elem = await page.$('div.info-columns mee-rewards-counter-animation span');
|
||||||
|
if (elem)
|
||||||
|
return;
|
||||||
|
|
||||||
|
console.log('> Logging In...');
|
||||||
|
|
||||||
|
// elem = await page.$('#raf-signin-link-id');
|
||||||
|
// console.log('> Logging In...0');
|
||||||
|
// if (elem == null)
|
||||||
|
// return;
|
||||||
|
//
|
||||||
|
// await elem.click();
|
||||||
|
// await page.waitForNavigation({waitUntil: 'networkidle0'});
|
||||||
|
|
||||||
|
elem = await page.$('[name="loginfmt"]');
|
||||||
|
|
||||||
|
await elem.type(this.id);
|
||||||
|
await elem.press('Enter');
|
||||||
|
|
||||||
|
await sleep(2);
|
||||||
|
|
||||||
|
elem = await page.$('[name="KMSI"]');
|
||||||
|
if (elem)
|
||||||
|
elem.click();
|
||||||
|
|
||||||
|
await sleep(1);
|
||||||
|
elem = await page.$('[name="passwd"]');
|
||||||
|
await elem.type(this.pw);
|
||||||
|
await elem.press('Enter');
|
||||||
|
|
||||||
|
await sleep(3);
|
||||||
|
|
||||||
|
elem = await page.$('#iLooksGood');
|
||||||
|
if (elem) {
|
||||||
|
await elem.click();
|
||||||
|
await sleep(1);
|
||||||
|
await page.waitForNavigation();
|
||||||
|
}
|
||||||
|
|
||||||
|
elem = await page.$('#KmsiCheckboxField');
|
||||||
|
if (elem) {
|
||||||
|
elem.click();
|
||||||
|
elem = await page.$('#idSIButton9');
|
||||||
|
elem.click();
|
||||||
|
await sleep(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// check language error
|
||||||
|
elem = await page.$('#error-links > li > a');
|
||||||
|
if (elem)
|
||||||
|
elem.click();
|
||||||
|
|
||||||
|
console.log('> Logged In');
|
||||||
|
}
|
||||||
|
|
||||||
|
async getRewardPoint() {
|
||||||
|
if (this.mainPage.url() !== MAIN_URL) {
|
||||||
|
await this.mainPage.goto(MAIN_URL);
|
||||||
|
}
|
||||||
|
|
||||||
|
await sleep(5);
|
||||||
|
let point = await this.getText(this.mainPage, 'div.info-columns mee-rewards-counter-animation span');
|
||||||
|
console.log('> Current point :', point);
|
||||||
|
|
||||||
|
return parseInt(point.replace(',', ''));
|
||||||
|
}
|
||||||
|
|
||||||
|
async doDailyReward() {
|
||||||
|
console.log('> Daily Reward');
|
||||||
|
if (this.mainPage.url() !== MAIN_URL)
|
||||||
|
await this.mainPage.goto(MAIN_URL);
|
||||||
|
|
||||||
|
let cards = await this.mainPage.$$('#daily-sets mee-card');
|
||||||
|
cards.splice(3);
|
||||||
|
cards = cards.concat(await this.mainPage.$$('#more-activities mee-card'));
|
||||||
|
// console.log(cards.length + ' cards');
|
||||||
|
|
||||||
|
for (let card of cards) {
|
||||||
|
let newPage = null;
|
||||||
|
try {
|
||||||
|
if (!await card.$('.mee-icon-AddMedium') && !await card.$('.mee-icon-HourGlass'))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let title = await this.getText(this.mainPage, '.contentContainer > h3', card);
|
||||||
|
console.log('Card: [' + title + ']');
|
||||||
|
|
||||||
|
let elem = await card.$('div.actionLink');
|
||||||
|
await this.click(this.mainPage, elem);
|
||||||
|
await sleep(3);
|
||||||
|
|
||||||
|
let pages = await this.browser.pages();
|
||||||
|
if (pages.length === 2) // no new page
|
||||||
|
continue
|
||||||
|
newPage = pages[pages.length - 1];
|
||||||
|
await newPage.setViewport({height: 900, width: 1200});
|
||||||
|
|
||||||
|
await sleep(2);
|
||||||
|
await newPage.waitForSelector('body');
|
||||||
|
|
||||||
|
if (await newPage.$('.wk_paddingBtm'))
|
||||||
|
await this.doABCQuiz(newPage);
|
||||||
|
else if (await newPage.$('#rqStartQuiz'))
|
||||||
|
await this.doSelectQuiz(newPage);
|
||||||
|
else if (await newPage.$('.rqOption,.b_slidebar'))
|
||||||
|
await this.doSelectQuiz(newPage);
|
||||||
|
else {
|
||||||
|
console.log('Unknown card type');
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
} finally {
|
||||||
|
if (newPage && !newPage.isClosed())
|
||||||
|
await newPage.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
await rndSleep(2);
|
||||||
|
console.log('');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async getText(page, selector, elem = null) {
|
||||||
|
if (elem) {
|
||||||
|
return await page.evaluate((selector, elem) => elem.querySelector(selector).textContent, selector, elem);
|
||||||
|
} else {
|
||||||
|
return await page.evaluate((selector) => document.querySelector(selector).textContent, selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async checkRemainDailyReward() {
|
||||||
|
let elems = await this.mainPage.$$('#daily-sets mee-rewards-points .mee-icon-AddMedium');
|
||||||
|
let daily_remains = elems.length;
|
||||||
|
console.log(`Daily set : ${daily_remains} remains`);
|
||||||
|
elems = await this.mainPage.$$('#more-activities mee-card .mee-icon-AddMedium');
|
||||||
|
let more_remains = elems.length;
|
||||||
|
console.log(`More activities : ${more_remains} remains`);
|
||||||
|
return [daily_remains, more_remains];
|
||||||
|
}
|
||||||
|
|
||||||
|
async doABCQuiz(page) {
|
||||||
|
console.log('> ABC Quiz');
|
||||||
|
while (true) {
|
||||||
|
let answers = await page.$$('.wk_paddingBtm');
|
||||||
|
if (answers.length === 0) {
|
||||||
|
console.log('ERROR: Failed to get ABC quiz answer elements');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let rnd_answer = Math.floor(Math.random() * answers.length);
|
||||||
|
await answers[rnd_answer].click();
|
||||||
|
|
||||||
|
await rndSleep(2);
|
||||||
|
|
||||||
|
let elem = await page.$('input[value="Next question"]');
|
||||||
|
if (elem) {
|
||||||
|
await this.click(page, elem);
|
||||||
|
} else {
|
||||||
|
elem = await page.$('input[value="Get your score"]');
|
||||||
|
if (elem) await this.click(page, elem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
await rndSleep(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async doSelectQuiz(page) {
|
||||||
|
console.log('> Select Quiz');
|
||||||
|
await sleep(5);
|
||||||
|
let elem = await page.$('#rqStartQuiz');
|
||||||
|
if (elem) await this.click(page, elem);
|
||||||
|
|
||||||
|
await rndSleep(4);
|
||||||
|
elem = await page.$('.rqDragOption');
|
||||||
|
if (elem) { // order type quiz
|
||||||
|
console.log('Order-type quiz');
|
||||||
|
while (true) {
|
||||||
|
await rndSleep(5);
|
||||||
|
await this.insertDragDropFunc(page);
|
||||||
|
await rndSleep(1);
|
||||||
|
elem = await page.$('#quizCompleteContainer > div:nth-child(1) > div.headerMessage');
|
||||||
|
if (elem) {
|
||||||
|
console.log('Done');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let all_answers = await page.$$('.rqDragOption');
|
||||||
|
let correct_ans = await page.$$('.rqDragOption.correctAnswer');
|
||||||
|
let answers = [];
|
||||||
|
for (let an of all_answers) {
|
||||||
|
if (!correct_ans.includes(an))
|
||||||
|
answers.push(an);
|
||||||
|
}
|
||||||
|
let switchAns = rndSample(answers, 2);
|
||||||
|
let ans1 = await switchAns[0].getProperty('id');
|
||||||
|
let ans2 = await switchAns[1].getProperty('id');
|
||||||
|
let js = 'triggerDragAndDrop("#","#")'
|
||||||
|
await page.evaluate((id1, id2) => {
|
||||||
|
triggerDragAndDrop('#' + id1, '#' + id2);
|
||||||
|
}, ans1, ans2);
|
||||||
|
}
|
||||||
|
} else { // select quiz
|
||||||
|
// poll
|
||||||
|
if (await page.$('#btPollOverlay')) {
|
||||||
|
console.log('Daily Poll');
|
||||||
|
let opt = await page.$('#btPollOverlay .btOption');
|
||||||
|
if (opt) {
|
||||||
|
opt.click();
|
||||||
|
await rndSleep(3);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//else
|
||||||
|
|
||||||
|
const quizTypeData = [{
|
||||||
|
'type': 0,
|
||||||
|
'name': 'basic',
|
||||||
|
'tester': '#QuizContainerWrapper .rqOption',
|
||||||
|
'title': '.rqQuestion',
|
||||||
|
'btn': '#QuizContainerWrapper .rqOption'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'type': 1,
|
||||||
|
'name': 'many',
|
||||||
|
'tester': '#QuizContainerWrapper .b_slidebar',
|
||||||
|
'title': '.rqQuestion > .bt_queText',
|
||||||
|
'btn': '#QuizContainerWrapper .bt_lstcl_card'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'type': 2,
|
||||||
|
'name': 'thisthat',
|
||||||
|
'tester': '#QuizContainerWrapper .btOptionCard',
|
||||||
|
'title': '#QuizContainerWrapper .bt_Quefooter',
|
||||||
|
'btn': '#QuizContainerWrapper .btOptionCard'
|
||||||
|
}];
|
||||||
|
let elem, elems;
|
||||||
|
let quizType = -1;
|
||||||
|
for (let item of quizTypeData) {
|
||||||
|
elems = await page.$$(item['tester']);
|
||||||
|
if (elems.length !== 0) {
|
||||||
|
quizType = item['type'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quizType === -1) {
|
||||||
|
console.log('ERROR: Can\'t get select quiz type');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let quizData = quizTypeData[quizType];
|
||||||
|
console.log('Quiz Type:', quizData['name']);
|
||||||
|
let btns = await page.$$(quizData['btn']);
|
||||||
|
let answerCnt = btns.length;
|
||||||
|
let intervalTime = 5;
|
||||||
|
|
||||||
|
if (quizType === 1)
|
||||||
|
answerCnt = 8;
|
||||||
|
else if (quizType === 2)
|
||||||
|
intervalTime = 10;
|
||||||
|
|
||||||
|
|
||||||
|
console.log('# of answers:', answerCnt);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
await rndSleep(intervalTime);
|
||||||
|
elem = await page.$('#quizCompleteContainer > div:nth-child(1) > div.headerMessage');
|
||||||
|
if (elem) break;
|
||||||
|
|
||||||
|
elem = await page.$('.headerMessage_Refresh');
|
||||||
|
if (elem) break;
|
||||||
|
|
||||||
|
let answerIds = [...Array(answerCnt).keys()];
|
||||||
|
shuffleArray(answerIds);
|
||||||
|
let i = 0;
|
||||||
|
let oldTitle = await this.getText(page, quizData['title']);
|
||||||
|
while (i < answerCnt && i < 10) {
|
||||||
|
elems = await page.$$(quizData['btn']);
|
||||||
|
console.log('- Selecting answer#', answerIds[i]);
|
||||||
|
await this.elemCoordinateClick(page, elems[answerIds[i]]);
|
||||||
|
await rndSleep(intervalTime);
|
||||||
|
|
||||||
|
let newTitle = await this.getText(page, quizData['title']);
|
||||||
|
if (oldTitle !== newTitle) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async click(page, elem) {
|
||||||
|
await page.evaluate((elem) => elem.click(), elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
async insertDragDropFunc(page) {
|
||||||
|
let js = 'window.triggerDragAndDrop=function(e,o){var t=function(e,o,t,r){var n=document.createEvent("MouseEvents");n.initMouseEvent(e,!0,!0,window,1,1,1,t,r,!1,!1,!1,!1,0,o),o.dispatchEvent(n)},r=document.querySelector(e),n=document.querySelector(o);if(!r||!n)return!1;var u=r.getBoundingClientRect(),a=Math.floor((u.left+u.right)/2),d=Math.floor((u.top+u.bottom)/2);u=n.getBoundingClientRect();var m=Math.floor((u.left+u.right)/2),g=Math.floor((u.top+u.bottom)/2);return t("mousemove",r,a,d),t("mouseenter",r,a,d),t("mouseover",r,a,d),t("mousedown",r,a,d),t("dragstart",r,a,d),t("drag",r,a,d),t("mousemove",r,a,d),t("drag",r,m,g),t("mousemove",n,m,g),t("mouseenter",n,m,g),t("dragenter",n,m,g),t("mouseover",n,m,g),t("dragover",n,m,g),t("drop",n,m,g),t("dragend",r,m,g),t("mouseup",r,m,g),!0};';
|
||||||
|
await page.addScriptTag({content: js});
|
||||||
|
}
|
||||||
|
|
||||||
|
async elemCoordinateClick(page, elem) {
|
||||||
|
await page.evaluate((elem) => {
|
||||||
|
let rect = elem.getBoundingClientRect();
|
||||||
|
let obj = document.elementFromPoint(rect.x + 10, rect.y + 10);
|
||||||
|
obj.click();
|
||||||
|
}, elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getSearchKeywords() {
|
||||||
|
let getKeyword = (url, regex) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
let args = {headers: {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36'}};
|
||||||
|
fetch(url, args)
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(html => {
|
||||||
|
let matches = html.matchAll(regex);
|
||||||
|
let keywords = [];
|
||||||
|
for (let item of matches)
|
||||||
|
keywords.push(item[1]);
|
||||||
|
resolve(keywords);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.keywords !== null)
|
||||||
|
return this.keywords;
|
||||||
|
|
||||||
|
let key1 = await getKeyword('https://datalab.naver.com/keyword/realtimeList.naver', '<span class="item_title">(.*?)</span>');
|
||||||
|
let key2 = await getKeyword('https://trends.google.com/trends/trendingsearches/daily/rss?geo=US', '<title>(.*?)</title>');
|
||||||
|
|
||||||
|
let keywords = key1.concat(key2);
|
||||||
|
|
||||||
|
if (keywords.length < 80) {
|
||||||
|
let mixes = [];
|
||||||
|
for (let i = keywords.length; i < 80; i++) {
|
||||||
|
let joins = rndSample(keywords, 2);
|
||||||
|
mixes.push(joins.join(' '));
|
||||||
|
}
|
||||||
|
keywords = keywords.concat(mixes);
|
||||||
|
}
|
||||||
|
this.keywords = keywords;
|
||||||
|
return keywords;
|
||||||
|
}
|
||||||
|
|
||||||
|
async doSearch(searchCnt = 30, page = null) {
|
||||||
|
let keywords = await this.getSearchKeywords();
|
||||||
|
if (!page)
|
||||||
|
page = this.mainPage;
|
||||||
|
|
||||||
|
await page.goto('https://www.bing.com/');
|
||||||
|
|
||||||
|
shuffleArray(keywords);
|
||||||
|
searchCnt += Math.floor(Math.random() * 10);
|
||||||
|
for (let i = 0; i < searchCnt; i++) {
|
||||||
|
try {
|
||||||
|
console.log(`Search ${i + 1}/${searchCnt} : ${keywords[i]}`);
|
||||||
|
let searchBar = await page.$('#sb_form_q');
|
||||||
|
// clear
|
||||||
|
await searchBar.click({clickCount: 3});
|
||||||
|
await searchBar.press('Backspace');
|
||||||
|
|
||||||
|
await searchBar.type(keywords[i], {delay: 200});
|
||||||
|
await searchBar.press('Enter');
|
||||||
|
|
||||||
|
await rndSleep(2);
|
||||||
|
// await rndSleep(5, 10);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async checkSearchStatus() {
|
||||||
|
// await this.mainPage.waitForNavigation({waitUntil: "networkidle2"} );
|
||||||
|
await this.mainPage.goto('https://rewards.bing.com/pointsbreakdown');
|
||||||
|
await sleep(2);
|
||||||
|
let elems = await this.mainPage.$$('div.cardContainer p.pointsDetail');
|
||||||
|
let status = {};
|
||||||
|
let statusOrder = ['chrome', 'mobile', 'edge'];
|
||||||
|
// if(elems.length === 2)
|
||||||
|
// statusOrder = statusOrder.splice(1);
|
||||||
|
// TODO: check for level 1 status
|
||||||
|
|
||||||
|
for (let i = 0; i < elems.length; i++) {
|
||||||
|
let elem = elems[i];
|
||||||
|
let text = await this.mainPage.evaluate((elem) => elem.textContent, elem);
|
||||||
|
text = text.split('/');
|
||||||
|
status[statusOrder[i]] = [parseInt(text[0]), parseInt(text[1])];
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
async doAllSearch() {
|
||||||
|
let searchStatus = await this.checkSearchStatus();
|
||||||
|
console.log('> Search status:', searchStatus);
|
||||||
|
|
||||||
|
for (let searchType in searchStatus) {
|
||||||
|
let searchCnt = Math.floor((searchStatus[searchType][1] - searchStatus[searchType][0]) / 5);
|
||||||
|
if (searchCnt !== 0) {
|
||||||
|
console.log('>', searchType, 'search');
|
||||||
|
let page = await this.newPage(searchType);
|
||||||
|
await this.doSearch(searchCnt, page);
|
||||||
|
await page.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
scp ./*.js hs:~/workspace/bingauto2/.
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
const BingAuto2 = require('./bingauto2')
|
||||||
|
|
||||||
|
let sleep = (sec) => {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, sec * 1000));
|
||||||
|
}
|
||||||
|
|
||||||
|
let main = async () => {
|
||||||
|
let accounts = [['nemobaki@hotmail.com', 'Rhlehvkd26'], ['yirugi@hotmail.com', 'Dlfnzl26'], ['rosemarymulti2@outlook.com', 'fhwmakfl2'], ['kim.iluk@hotmail.com', 'Dlfnzl26']];
|
||||||
|
// accounts = accounts.splice(2);
|
||||||
|
for (let account of accounts) {
|
||||||
|
let ba = new BingAuto2(account[0], account[1], true);
|
||||||
|
console.log('Start collection (' + account[0] + ') -', new Date().toLocaleString());
|
||||||
|
try {
|
||||||
|
await ba.startBrowser();
|
||||||
|
await ba.newMainPage();
|
||||||
|
let curPoint = await ba.getRewardPoint();
|
||||||
|
|
||||||
|
for (let i = 0; i < 2; i++) {
|
||||||
|
await ba.doDailyReward();
|
||||||
|
await ba.doAllSearch();
|
||||||
|
}
|
||||||
|
|
||||||
|
let earned = await ba.getRewardPoint() - curPoint;
|
||||||
|
console.log('> Earned : ', earned);
|
||||||
|
console.log('End collection (' + account[0] + ') -', new Date().toLocaleString());
|
||||||
|
console.log('\n\n');
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Error: ', e);
|
||||||
|
} finally {
|
||||||
|
await ba.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
await sleep(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,455 @@
|
|||||||
|
{
|
||||||
|
"name": "bingauto2",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": {
|
||||||
|
"version": "14.14.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
|
||||||
|
"integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@types/yauzl": {
|
||||||
|
"version": "2.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
|
||||||
|
"integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"agent-base": {
|
||||||
|
"version": "5.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
|
||||||
|
"integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"base64-js": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"bl": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"buffer": "^5.5.0",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"readable-stream": "^3.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buffer": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.1.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buffer-crc32": {
|
||||||
|
"version": "0.2.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
||||||
|
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"chownr": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"devtools-protocol": {
|
||||||
|
"version": "0.0.818844",
|
||||||
|
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz",
|
||||||
|
"integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"end-of-stream": {
|
||||||
|
"version": "1.4.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||||
|
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extract-zip": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/yauzl": "^2.9.1",
|
||||||
|
"debug": "^4.1.1",
|
||||||
|
"get-stream": "^5.1.0",
|
||||||
|
"yauzl": "^2.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fd-slicer": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"pend": "~1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"find-up": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^5.0.0",
|
||||||
|
"path-exists": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fs-constants": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"get-stream": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"pump": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||||
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https-proxy-agent": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"agent-base": "5",
|
||||||
|
"debug": "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ieee754": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^4.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mkdirp-classic": {
|
||||||
|
"version": "0.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
||||||
|
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node-fetch": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-try": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^2.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-try": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"path-exists": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pend": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pkg-dir": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"find-up": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"progress": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"proxy-from-env": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pump": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"end-of-stream": "^1.1.0",
|
||||||
|
"once": "^1.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"puppeteer": {
|
||||||
|
"version": "5.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^4.1.0",
|
||||||
|
"devtools-protocol": "0.0.818844",
|
||||||
|
"extract-zip": "^2.0.0",
|
||||||
|
"https-proxy-agent": "^4.0.0",
|
||||||
|
"node-fetch": "^2.6.1",
|
||||||
|
"pkg-dir": "^4.2.0",
|
||||||
|
"progress": "^2.0.1",
|
||||||
|
"proxy-from-env": "^1.0.0",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"tar-fs": "^2.0.0",
|
||||||
|
"unbzip2-stream": "^1.3.3",
|
||||||
|
"ws": "^7.2.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"string_decoder": "^1.1.1",
|
||||||
|
"util-deprecate": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rimraf": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"glob": "^7.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "~5.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tar-fs": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chownr": "^1.1.1",
|
||||||
|
"mkdirp-classic": "^0.5.2",
|
||||||
|
"pump": "^3.0.0",
|
||||||
|
"tar-stream": "^2.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tar-stream": {
|
||||||
|
"version": "2.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz",
|
||||||
|
"integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"bl": "^4.0.3",
|
||||||
|
"end-of-stream": "^1.4.1",
|
||||||
|
"fs-constants": "^1.0.0",
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"readable-stream": "^3.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"through": {
|
||||||
|
"version": "2.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||||
|
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"unbzip2-stream": {
|
||||||
|
"version": "1.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
|
||||||
|
"integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"buffer": "^5.2.1",
|
||||||
|
"through": "^2.3.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"util-deprecate": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "7.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
|
||||||
|
"integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"yauzl": {
|
||||||
|
"version": "2.10.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
||||||
|
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"buffer-crc32": "~0.2.3",
|
||||||
|
"fd-slicer": "~1.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "bingauto2",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"puppeteer": "^5.5.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"node-fetch": "^2.6.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
const BingAuto2 = require('./bingauto2')
|
||||||
|
|
||||||
|
let sleep = (sec) => {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, sec * 1000));
|
||||||
|
}
|
||||||
|
|
||||||
|
let main = async () => {
|
||||||
|
let accounts = [['nemobaki@hotmail.com', 'Rhlehvkd26'], ['yirugi@hotmail.com', 'Dlfnzl26'], ['rosemarymulti2@outlook.com', 'fhwmakfl2'], ['kim.iluk@hotmail.com', 'Dlfnzl26']];
|
||||||
|
// accounts = accounts.splice(3);
|
||||||
|
for (let account of accounts) {
|
||||||
|
let ba = new BingAuto2(account[0], account[1], true);
|
||||||
|
console.log('Start collection (' + account[0] + ') -', new Date().toLocaleString());
|
||||||
|
|
||||||
|
await ba.startBrowser();
|
||||||
|
await ba.newMainPage();
|
||||||
|
let curPoint = await ba.getRewardPoint();
|
||||||
|
|
||||||
|
for (let i = 0; i < 2; i++) {
|
||||||
|
await ba.doDailyReward();
|
||||||
|
await ba.doAllSearch();
|
||||||
|
}
|
||||||
|
|
||||||
|
await ba.doAllSearch();
|
||||||
|
|
||||||
|
let earned = await ba.getRewardPoint() - curPoint;
|
||||||
|
console.log('> Earned : ', earned);
|
||||||
|
console.log('End collection (' + account[0] + ') -', new Date().toLocaleString());
|
||||||
|
console.log('\n\n');
|
||||||
|
|
||||||
|
await ba.close();
|
||||||
|
|
||||||
|
// await sleep(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue