Merge branch 'master' into feature/macOcr

This commit is contained in:
2023-10-28 16:06:45 +02:00
4 changed files with 85 additions and 21 deletions
+1
View File
@@ -23,5 +23,6 @@ const OCRResult = {
BRAVE_PRIVACY_PUB: Symbol("BRAVE_PRIVACY_PUB"), BRAVE_PRIVACY_PUB: Symbol("BRAVE_PRIVACY_PUB"),
BRAVE_NOTIFICATION: Symbol("BRAVE_NOTIFICATION"), BRAVE_NOTIFICATION: Symbol("BRAVE_NOTIFICATION"),
CHOOSE_POSITION: Symbol("CHOOSE_POSITION"), CHOOSE_POSITION: Symbol("CHOOSE_POSITION"),
BRAVE_VPN_SKIP: Symbol("BRAVE_VPN_SKIP"),
} }
module.exports = OCRResult module.exports = OCRResult
+24
View File
@@ -0,0 +1,24 @@
const tesseract = require("node-tesseract-ocr");
const Jimp = require("jimp");
const config = {
lang: "eng",
oem: 1,
psm: 3,
}
async function convertImageToWhiteBlack(image_path) {
const image = await Jimp.read(image_path);
image.().write(image_path + ".wb");
return image_path + ".wb";
}
// let filePath = "/Users/panlei/Desktop/blocked_000c3af9-711e-4b7e-b8ac-5c0a5a2122e7.png"
let filePath = "/Users/panlei/Desktop/01c2456c-blocked_0423a70a-171d-4cb2-9d7d-06ca0dcf6169.png"
convertImageToWhiteBlack(filePath).then(newFilePath => {
tesseract
.recognize(newFilePath, config).then(result => {
console.log(result)
})
})
+53 -20
View File
@@ -91,6 +91,30 @@ class CommandorPage {
this.firstStart = true; this.firstStart = true;
} }
async getActivePage(browser, timeout) {
const start = new Date().getTime();
while (new Date().getTime() - start < timeout) {
logWithDevice("get pages", this.device)
let pages = await browser.pages();
try {
pages.forEach((currentPage) => {
if (currentPage.url() === RDV_URL) {
return currentPage;
} else {
try {
currentPage.close()
} catch (e) {
console.log(e)
}
}
})
} catch (e) {
this.isTerminated = true;
console.log(e)
}
}
throw "Unable to get active page";
}
async connect_to_browser(ocrResult) { async connect_to_browser(ocrResult) {
console.log("connect_to_browser() called"); console.log("connect_to_browser() called");
@@ -193,7 +217,6 @@ class CommandorPage {
} }
} catch (e) { } catch (e) {
logWithDevice("failed to connect to device", this.device) logWithDevice("failed to connect to device", this.device)
console.log(e) console.log(e)
// await this.resetBrowser() // await this.resetBrowser()
await this.checkResultWithOcr() await this.checkResultWithOcr()
@@ -214,6 +237,7 @@ class CommandorPage {
await this.acceptCookies(); await this.acceptCookies();
await this.enableDisableAirPlanMode(); await this.enableDisableAirPlanMode();
await delay(10 * 1000); await delay(10 * 1000);
// await this.checkResultWithOcr()
await this.clickOnlineAppointment(); await this.clickOnlineAppointment();
} else { } else {
this.isTerminated = true; this.isTerminated = true;
@@ -262,13 +286,8 @@ class CommandorPage {
console.log(e) console.log(e)
} }
} }
// if (this.page.url() === RDV_URL) {
// if (!this.isFillingFields)
// await this.fillFields(this.page, false);
// }
} catch (e) { } catch (e) {
log(e) console.log(e)
await this.checkResultWithOcr(); await this.checkResultWithOcr();
} }
} }
@@ -680,10 +699,11 @@ class CommandorPage {
try { try {
let content = await this.page.content(); let content = await this.page.content();
let captcha_url = "geo.captcha-delivery.com/captcha"; let captcha_url = "geo.captcha-delivery.com/captcha";
if (content.toString().includes(captcha_url)) { // if (content.toString().includes(captcha_url)) {
await this.checkResultWithOcr() // await this.checkResultWithOcr()
logWithDevice("发现datadome", this.device); // logWithDevice("发现datadome", this.device);
} else if (content.includes("502 Bad Gateway")) { // } else
if (content.includes("502 Bad Gateway")) {
logWithDevice("502 Bad Gateway found", this.device) logWithDevice("502 Bad Gateway found", this.device)
await this.page.reload() await this.page.reload()
} else if (this.page.url().includes("sorry")) { } else if (this.page.url().includes("sorry")) {
@@ -728,8 +748,8 @@ class CommandorPage {
async slidingCaptcha(onResult) { async slidingCaptcha(onResult) {
logWithDevice("slidingCaptcha", this.device); logWithDevice("slidingCaptcha", this.device);
if (this.device.model() === "MI 5s") { if (this.device.model() === "MI 5s" || this.device.model() === "ASUS_X00QD") {
let cmd = `adb -s ${this.device.serial()} shell input touchscreen swipe 900 495 900 295` let cmd = `adb -s ${this.device.serial()} shell input touchscreen swipe 900 495 900 195`
await exec(cmd); await exec(cmd);
await delay(1000); await delay(1000);
} }
@@ -857,9 +877,14 @@ class CommandorPage {
} }
} }
async checkResultWithOcr() { async checkResultWithOcr() {
logWithDevice("checkResultWithOcr() called.", this.device) logWithDevice("checkResultWithOcr() called.", this.device)
await delay(4000); if (this.device.model() === "M2006C3LG")
await delay(6000);
else {
await delay(4000);
}
let checkResult = await this.ocrChecker.get_result(); let checkResult = await this.ocrChecker.get_result();
console.log(checkResult); console.log(checkResult);
while (checkResult === OCRResult.RECHECK || checkResult === OCRResult.NO_INTERNET) { while (checkResult === OCRResult.RECHECK || checkResult === OCRResult.NO_INTERNET) {
@@ -888,7 +913,6 @@ class CommandorPage {
await this.connect_to_browser(checkResult) await this.connect_to_browser(checkResult)
break; break;
case OCRResult.FILL_FIELD: case OCRResult.FILL_FIELD:
// console.log("browser.isConnected: " + this.browser.isConnected());
if (this.browser === undefined || !this.browser.isConnected()) { if (this.browser === undefined || !this.browser.isConnected()) {
logWithDevice("trying to connect to browser", this.device) logWithDevice("trying to connect to browser", this.device)
try { try {
@@ -930,8 +954,6 @@ class CommandorPage {
logWithDevice("get pages", this.device) logWithDevice("get pages", this.device)
let pages = await this.browser.pages(); let pages = await this.browser.pages();
logWithDevice("get current page", this.device) logWithDevice("get current page", this.device)
// let needPages = pages.filter(currentPage => currentPage.url() === RDV_URL)
// this.page = needPages[0]
try { try {
pages.forEach((currentPage) => { pages.forEach((currentPage) => {
if (currentPage.url() === RDV_URL) { if (currentPage.url() === RDV_URL) {
@@ -994,10 +1016,11 @@ class CommandorPage {
case OCRResult.BRAVE_PRIVACY: case OCRResult.BRAVE_PRIVACY:
if (this.device.model() === "MI 5s") { if (this.device.model() === "MI 5s") {
await this.tapForDevice(this.device, 530, 970) await this.tapForDevice(this.device, 530, 970)
// await this.device.shell("input tap " + 530 + " " + 970) } else if (this.device.model() === "ONEPLUS A6000") {
} else if (this.device.model() === "ONEPLUS A6000")
await this.device.shell("input tap " + 530 + " " + 1064) await this.device.shell("input tap " + 530 + " " + 1064)
else if (this.device.model() === "KB2003" || this.device.model() === "DE2117") { } else if (this.device.model() === "M2006C3LG") {
await this.tapForDevice(this.device, 350, 777)
} else if (this.device.model() === "KB2003" || this.device.model() === "DE2117") {
await this.tapForDevice(this.device, 500, 1200) await this.tapForDevice(this.device, 500, 1200)
await this.tapForDevice(this.device, 500, 1120) await this.tapForDevice(this.device, 500, 1120)
} else } else
@@ -1037,6 +1060,12 @@ class CommandorPage {
await this.tapForDevice(this.device, 300, 1700) await this.tapForDevice(this.device, 300, 1700)
await this.checkResultWithOcr(); await this.checkResultWithOcr();
break; break;
case OCRResult.BRAVE_VPN_SKIP:
logWithDevice("BRAVE_VPN_SKIP", this.device)
if (this.device.model() === "M2006C3LG") {
await this.tapForDevice(this.device, 580, 445)
}
break;
case OCRResult.TO_SKIP case OCRResult.TO_SKIP
: :
logWithDevice("TO_SKIP", this.device) logWithDevice("TO_SKIP", this.device)
@@ -1122,6 +1151,8 @@ class CommandorPage {
await this.device.shell("input tap " + 558 + " " + 1160) await this.device.shell("input tap " + 558 + " " + 1160)
} else if (model === "MI 5s") { } else if (model === "MI 5s") {
await this.tapForDevice(this.device, 530, 1000) await this.tapForDevice(this.device, 530, 1000)
} else if (model === "M2006C3LG") {
await this.tapForDevice(this.device, 360, 777)
} else if (model === "ONEPLUS A6000") { } else if (model === "ONEPLUS A6000") {
await this.device.shell("input tap " + 530 + " " + 1106) await this.device.shell("input tap " + 530 + " " + 1106)
} else { } else {
@@ -1246,6 +1277,8 @@ class CommandorPage {
await this.tapForDevice(this.device, 411, 2020) await this.tapForDevice(this.device, 411, 2020)
} else if (this.browserPackageName.includes("brave") && this.device.model() === "21091116C") { } else if (this.browserPackageName.includes("brave") && this.device.model() === "21091116C") {
await this.tapForDevice(this.device, 411, 2020) await this.tapForDevice(this.device, 411, 2020)
} else if (this.browserPackageName.includes("brave") && this.device.model() === "M2006C3LG") {//redmi 9a
await this.tapForDevice(this.device, 411, 1300)
} else { } else {
await this.tapForDevice(this.device, 411, 2100) await this.tapForDevice(this.device, 411, 2100)
} }
+7 -1
View File
@@ -13,6 +13,7 @@ function delay(delayInMs) {
} }
const NO_INTERNET_FR = "Aucun accés a Internet" const NO_INTERNET_FR = "Aucun accés a Internet"
const BRAVE_VPN_SKIP = "Pare-feu + VPN Brave"
const MESSAGE_URL_VALIDATION_FR = "envoyé un lien par e-mail." const MESSAGE_URL_VALIDATION_FR = "envoyé un lien par e-mail."
const MESSAGE_URL_VALIDATION_FR_2 = "un lien par e-mail" const MESSAGE_URL_VALIDATION_FR_2 = "un lien par e-mail"
const MESSAGE_URL_VALIDATION_EN = "Please click on the link we sent by email" const MESSAGE_URL_VALIDATION_EN = "Please click on the link we sent by email"
@@ -32,6 +33,7 @@ const SLIDING_CAPTCHA_FR = "Pourquoi cette vérification"
const SLIDING_CAPTCHA_FR_2 = "Glissez vers la droite pour" const SLIDING_CAPTCHA_FR_2 = "Glissez vers la droite pour"
const SLIDING_CAPTCHA_FR_3 = "la droite pour completer le puzzle" const SLIDING_CAPTCHA_FR_3 = "la droite pour completer le puzzle"
const SLIDING_CAPTCHA_FR_4 = " s'assure qu'on s'adresse bien" const SLIDING_CAPTCHA_FR_4 = " s'assure qu'on s'adresse bien"
const SLIDING_CAPTCHA_FR_5 = "On s'assure que c'est"
const MESSAGE_FILL_FIELD_FR = "Demande de rendez-vous pour" const MESSAGE_FILL_FIELD_FR = "Demande de rendez-vous pour"
const MESSAGE_FILL_FIELD_FR_2 = "des champs de données doivent étre complétés" const MESSAGE_FILL_FIELD_FR_2 = "des champs de données doivent étre complétés"
const MESSAGE_FILL_FIELD_FR_3 = "Sans préféré" const MESSAGE_FILL_FIELD_FR_3 = "Sans préféré"
@@ -92,6 +94,10 @@ class OCRChecker {
} else if (result.includes(CHOOSE_POSITION_GOOGLE_FR)) { } else if (result.includes(CHOOSE_POSITION_GOOGLE_FR)) {
await this.deleteFile(fileName) await this.deleteFile(fileName)
return OCRResult.CHOOSE_POSITION return OCRResult.CHOOSE_POSITION
} else if (result.includes(BRAVE_VPN_SKIP)) {
await this.deleteFile(fileName)
await this.deleteFile(screenShot)
return OCRResult.BRAVE_VPN_SKIP
} else if (result.includes(MESSAGE_FILL_FIELD_FR) || result.includes(MESSAGE_FILL_FIELD_FR_2) || result.includes(MESSAGE_FILL_FIELD_FR_3) || result.includes(MESSAGE_FILL_FIELD_FR_4) || result.includes(MESSAGE_FILL_FIELD_FR_5)) { } else if (result.includes(MESSAGE_FILL_FIELD_FR) || result.includes(MESSAGE_FILL_FIELD_FR_2) || result.includes(MESSAGE_FILL_FIELD_FR_3) || result.includes(MESSAGE_FILL_FIELD_FR_4) || result.includes(MESSAGE_FILL_FIELD_FR_5)) {
await this.deleteFile(fileName) await this.deleteFile(fileName)
return OCRResult.FILL_FIELD return OCRResult.FILL_FIELD
@@ -108,7 +114,7 @@ class OCRChecker {
} else if (result.includes(BRAVE_NOTIFICATION)) { } else if (result.includes(BRAVE_NOTIFICATION)) {
await this.deleteFile(fileName) await this.deleteFile(fileName)
return OCRResult.BRAVE_NOTIFICATION return OCRResult.BRAVE_NOTIFICATION
} else if (result.includes(SLIDING_CAPTCHA_FR) || result.includes(SLIDING_CAPTCHA_FR_2) || result.includes(SLIDING_CAPTCHA_FR_3) || result.includes(SLIDING_CAPTCHA_FR_4)) { } else if (result.includes(SLIDING_CAPTCHA_FR) || result.includes(SLIDING_CAPTCHA_FR_2) || result.includes(SLIDING_CAPTCHA_FR_3) || result.includes(SLIDING_CAPTCHA_FR_4) || result.includes(SLIDING_CAPTCHA_FR_5)) {
await this.deleteFile(fileName) await this.deleteFile(fileName)
// await this.deleteFile(screenShot) // await this.deleteFile(screenShot)
// if (result.includes("rac")) // if (result.includes("rac"))