can cancel promis
This commit is contained in:
@@ -12,17 +12,48 @@ function delay(delayInms) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mongoManager = new MongoManager();
|
const mongoManager = new MongoManager();
|
||||||
mongoManager.connect()
|
|
||||||
|
|
||||||
let excelUtil = new ExcelUtil();
|
let excelUtil = new ExcelUtil();
|
||||||
let contactList = excelUtil.readContacts();
|
let contactList = excelUtil.readContacts();
|
||||||
(async () => {
|
|
||||||
// Connect to the device.
|
// Connect to the device.
|
||||||
const [device] = await android.devices();
|
|
||||||
|
async function startBook(contactPojo, device) {
|
||||||
console.log(`Model: ${device.model()}`);
|
console.log(`Model: ${device.model()}`);
|
||||||
console.log(`Serial: ${device.serial()}`);
|
console.log(`Serial: ${device.serial()}`);
|
||||||
let commandor = new CommandorPage(contactList[3], device, mongoManager);
|
let commandor = new CommandorPage(contactPojo, device, mongoManager);
|
||||||
//read contacts form excel
|
//read contacts form excel
|
||||||
await commandor.loadPage();
|
return await commandor.loadPage();
|
||||||
// Take screenshot of the whole device.
|
}
|
||||||
})();
|
|
||||||
|
mongoManager.connect().then(r => console.log("mongo connected"))
|
||||||
|
|
||||||
|
async function printFiles() {
|
||||||
|
let devices = await android.devices();
|
||||||
|
await contactList.reduce(async (promise, contactPojo) => {
|
||||||
|
// This line will wait for the last async function to finish.
|
||||||
|
// The first iteration uses an already resolved Promise
|
||||||
|
// so, it will immediately continue.
|
||||||
|
await promise;
|
||||||
|
const contents = await startBook(contactPojo, devices[0]);
|
||||||
|
console.log(contents);
|
||||||
|
}, Promise.resolve());
|
||||||
|
}
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
printFiles()
|
||||||
|
})()
|
||||||
|
|
||||||
|
|
||||||
|
// android.devices().then((device_list) => {
|
||||||
|
// contactList.forEach((contactPojo) => {
|
||||||
|
// device_list.forEach((device) => {
|
||||||
|
// (async () => {
|
||||||
|
// await startBook(contactPojo, device)
|
||||||
|
// })()
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
// })
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
const {_android: android} = require("playwright");
|
const {_android: android} = require("playwright");
|
||||||
|
|
||||||
const SolveCaptcha = require("./SolveCaptcha");
|
const SolveCaptcha = require("./SolveCaptcha");
|
||||||
const ReserveResultPojo = require("../models/ReserveResultPojo");
|
const ReserveResultPojo = require("../models/ReserveResultPojo");
|
||||||
const PublishType = require("../models/PublishType");
|
const PublishType = require("../models/PublishType");
|
||||||
const {aws4} = require("mongodb/src/deps");
|
|
||||||
|
|
||||||
// const RDV_URL = "http://192.168.0.44:8000/test_appointment.html"
|
const RDV_URL = "http://192.168.0.44:8000/test_appointment.html"
|
||||||
const RDV_URL = "https://rendezvousparis.hermes.com/client/register";
|
// const RDV_URL = "https://rendezvousparis.hermes.com/client/register";
|
||||||
|
|
||||||
const COUNTRY_ID = "#phone_country"
|
const COUNTRY_ID = "#phone_country"
|
||||||
const PHONE_NUMBER = "#phone_number"
|
const PHONE_NUMBER = "#phone_number"
|
||||||
@@ -17,6 +17,8 @@ const CGU_ID = "#cgu"
|
|||||||
const PROCESSING_ID = "#processing"
|
const PROCESSING_ID = "#processing"
|
||||||
const PASSPORT_ID = "#passport_id"
|
const PASSPORT_ID = "#passport_id"
|
||||||
|
|
||||||
|
const TIME_OUT = 60 * 1000 * 10//10mins
|
||||||
|
|
||||||
const CONFIRMED_MESSAGE = "Your request for a Leather Goods appointment has been registered"
|
const CONFIRMED_MESSAGE = "Your request for a Leather Goods appointment has been registered"
|
||||||
const CONFIRMED_MESSAGE_FR = "Votre demande de rendez-vous Maroquinerie a bien été enregistrée et nous vous en remercions."
|
const CONFIRMED_MESSAGE_FR = "Votre demande de rendez-vous Maroquinerie a bien été enregistrée et nous vous en remercions."
|
||||||
const MESSAGE_URL_VALIDATION_FR = "Nous avons envoyé un lien par e-mail."
|
const MESSAGE_URL_VALIDATION_FR = "Nous avons envoyé un lien par e-mail."
|
||||||
@@ -49,31 +51,43 @@ class CommandorPage {
|
|||||||
this.device = device;
|
this.device = device;
|
||||||
this.mongoManager = mongoManager;
|
this.mongoManager = mongoManager;
|
||||||
this.isFillingFields = false;
|
this.isFillingFields = false;
|
||||||
|
this.isTerminated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadPage() {
|
async loadPage() {
|
||||||
// Connect to the device.
|
// Connect to the device.
|
||||||
console.log("loadPage() called");
|
console.log("loadPage() called");
|
||||||
|
|
||||||
// --------------------- Browser -----------------------
|
|
||||||
// Launch Chrome browser.
|
|
||||||
await this.device.shell('am force-stop com.android.chrome');
|
await this.device.shell('am force-stop com.android.chrome');
|
||||||
const context = await this.device.launchBrowser({command: '--incognito'});
|
const context = await this.device.launchBrowser({command: '--incognito'});
|
||||||
|
|
||||||
// Use BrowserContext as usual.
|
// Use BrowserContext as usual.
|
||||||
this.page = await context.newPage();
|
this.page = await context.newPage();
|
||||||
this.page.on("load", (loaddePage) => {
|
this.page.on("load", (loadedPage) => {
|
||||||
this.onPageLoad(loaddePage)
|
this.onPageLoad(loadedPage)
|
||||||
})
|
})
|
||||||
await this.page.goto(RDV_URL);
|
await this.page.goto(RDV_URL);
|
||||||
// await this.fillFields(page)
|
|
||||||
console.log(await this.page.evaluate(() => window.location.href));
|
|
||||||
//wait 10 mins
|
//wait 10 mins
|
||||||
await delay(10 * 60 * 1000);
|
|
||||||
|
|
||||||
|
|
||||||
// Close the device.
|
// Close the device.
|
||||||
await this.device.close();
|
|
||||||
|
let cancel
|
||||||
|
const intervalTask = setInterval(() => {
|
||||||
|
if (this.isTerminated) {
|
||||||
|
console.log("request terminated, will close device")
|
||||||
|
context.close()
|
||||||
|
// this.page.close()
|
||||||
|
this.device.close()
|
||||||
|
clearInterval(intervalTask)
|
||||||
|
cancel()
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
}, 10 * 1000)//interval of 10 seconds
|
||||||
|
|
||||||
|
await new Promise(function (fulfill, reject) {
|
||||||
|
cancel = function () {
|
||||||
|
fulfill(Promise.resolve())
|
||||||
|
}
|
||||||
|
setTimeout(fulfill, TIME_OUT, 5)
|
||||||
|
}).then(console.log)
|
||||||
}
|
}
|
||||||
|
|
||||||
async chooseCountry(page) {
|
async chooseCountry(page) {
|
||||||
@@ -125,7 +139,7 @@ class CommandorPage {
|
|||||||
await delay(1000)
|
await delay(1000)
|
||||||
await page.click(PREFER_STORE);
|
await page.click(PREFER_STORE);
|
||||||
await page.selectOption(PREFER_STORE, "faubourg");
|
await page.selectOption(PREFER_STORE, "faubourg");
|
||||||
await page.click(PREFER_STORE);
|
// await page.click(PREFER_STORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -161,6 +175,10 @@ class CommandorPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async resolveCaptcha(page) {
|
async resolveCaptcha(page) {
|
||||||
|
if (RDV_URL.includes("192")) {
|
||||||
|
this.isTerminated = true;
|
||||||
|
return
|
||||||
|
}
|
||||||
this.captchaSolver = new SolveCaptcha(page);
|
this.captchaSolver = new SolveCaptcha(page);
|
||||||
await this.captchaSolver.start((solution) => {
|
await this.captchaSolver.start((solution) => {
|
||||||
console.log("solution is: " + solution);
|
console.log("solution is: " + solution);
|
||||||
|
|||||||
Reference in New Issue
Block a user