diff --git a/index.html b/index.html index 0325943..9ac4daf 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,5 @@ - + @@ -33,6 +33,8 @@ +
+ 自动语音分析
diff --git a/main.js b/main.js index 94303e4..9430b99 100644 --- a/main.js +++ b/main.js @@ -19,8 +19,8 @@ const createWindow = () => { win.loadFile('index.html').then((r) => { }) - ipcMain.on('start-book', (event, startNumber, endNumber, selectedStore) => { - startBook(startNumber, endNumber, selectedStore) + ipcMain.on('start-book', (event, startNumber, endNumber, selectedStore, audioAnalyse) => { + startBook(startNumber, endNumber, selectedStore, audioAnalyse) }) ipcMain.handle('scan-devices', scanDevices) // win.webContents.openDevTools(); @@ -37,15 +37,16 @@ app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit() }) -function startBook(startNumber, endNumber, selectedStore) { +function startBook(startNumber, endNumber, selectedStore, audioAnalyse) { console.log("startNumber: " + startNumber); console.log("endNumber: " + endNumber); console.log("selectedStore: " + selectedStore); + console.log("audioAnalyse: " + audioAnalyse); //load config.ini file let config = loadIniFile.sync(configFilePath); console.log(config); let contactExcelFilePath = config.DEFAULT.contact_list_file; - startBookWithNumbers(startNumber, endNumber, selectedStore, contactExcelFilePath).then(() => { + startBookWithNumbers(startNumber, endNumber, selectedStore, contactExcelFilePath, audioAnalyse).then(() => { console.log("stop") }) } diff --git a/preload.js b/preload.js index 23f5dd9..f23383e 100644 --- a/preload.js +++ b/preload.js @@ -1,6 +1,6 @@ const {contextBridge, ipcRenderer} = require('electron') contextBridge.exposeInMainWorld('appointment', { - startBook: (startNumber, endNumber, selectedStore) => ipcRenderer.send('start-book', startNumber, endNumber, selectedStore), + startBook: (startNumber, endNumber, selectedStore, audioAnalyse) => ipcRenderer.send('start-book', startNumber, endNumber, selectedStore, audioAnalyse), scanDevices: () => ipcRenderer.invoke('scan-devices') }) \ No newline at end of file diff --git a/renderer.js b/renderer.js index d1a7cdb..32da918 100644 --- a/renderer.js +++ b/renderer.js @@ -16,7 +16,8 @@ window.addEventListener('load', () => { } }) document.getElementById("start_book_btn").addEventListener('click', () => { - window.appointment.startBook(startNumber, endNumber, selectedStore) + let audioAnalyse = document.getElementById("audio_analyse").checked; + window.appointment.startBook(startNumber, endNumber, selectedStore, audioAnalyse); }) document.getElementById("store_selector").addEventListener('change', (event) => { selectedStore = event.target.value diff --git a/src/appointment.js b/src/appointment.js index eff562e..7c8d62b 100644 --- a/src/appointment.js +++ b/src/appointment.js @@ -35,11 +35,11 @@ async function needToBook(contact, mongoManager) { return toReturn } -async function startBook(contactPojo, device, selectedStore) { +async function startBook(contactPojo, device, selectedStore, audioAnalyse) { console.log(`型号: ${device.model()}`); console.log(`序列号: ${device.serial()}`); if (await needToBook(contactPojo, mongoManager)) { - let commandor = new CommandorPage(contactPojo, device, mongoManager, selectedStore); + let commandor = new CommandorPage(contactPojo, device, mongoManager, selectedStore, audioAnalyse); //read contacts form excel return await commandor.loadPage(); } else { @@ -47,18 +47,18 @@ async function startBook(contactPojo, device, selectedStore) { } } -async function startWithList(contacts, device, selectedStore) { +async function startWithList(contacts, device, selectedStore, audioAnalyse) { await contacts.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, device, selectedStore); + const contents = await startBook(contactPojo, device, selectedStore, audioAnalyse); console.log(contents); }, Promise.resolve()); } -async function startBookWithNumbers(startNumber, endNumber, selectedStore, pathToExcelFile = '/Users/lpan/Desktop/contact_all.xlsx') { +async function startBookWithNumbers(startNumber, endNumber, selectedStore, pathToExcelFile = '/Users/lpan/Desktop/contact_all.xlsx', audioAnalyse = false) { let allContactList = excelUtil.readContacts(pathToExcelFile); let contactList; if (endNumber <= allContactList.length) { @@ -80,7 +80,7 @@ async function startBookWithNumbers(startNumber, endNumber, selectedStore, pathT } let segmentNumber = listToBook.length / devices.length; for (let i = 0; i < devices.length; i++) { - startWithList(listToBook.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i], selectedStore); + startWithList(listToBook.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i], selectedStore, audioAnalyse); } }) }) diff --git a/src/workers/CommandorPage.js b/src/workers/CommandorPage.js index 8c584da..9e69227 100644 --- a/src/workers/CommandorPage.js +++ b/src/workers/CommandorPage.js @@ -57,7 +57,7 @@ function log(message) { } class CommandorPage { - constructor(contact, device, mongoManager, selectedStore = DEFAULT_STORE) { + constructor(contact, device, mongoManager, selectedStore = DEFAULT_STORE, audioAnalyse = false) { this.contact = contact; this.device = device; this.mongoManager = mongoManager; @@ -65,6 +65,7 @@ class CommandorPage { this.choosedStore = selectedStore this.isFillingFields = false; this.isTerminated = false; + this.audioAnalyse = audioAnalyse; } @@ -294,7 +295,9 @@ class CommandorPage { let content = await currentPage.content(); let captcha_url = "geo.captcha-delivery.com/captcha"; if (content.toString().includes(captcha_url)) { - await this.checkAudioBtn(); + if (this.audioAnalyse) { + await this.checkAudioBtn(); + } for (let i = 0; i < 15; i++) { await delay(1000) shell.beep() @@ -325,8 +328,8 @@ class CommandorPage { if (audioBtn) { log("audioBtn found") audioBtn.click() - let captchSolver = new GeoCaptchaSolver(this.page) - captchSolver.solve() + let captchaSolver = new GeoCaptchaSolver(this.page) + await captchaSolver.solve() } else { log("audioBtn not found") } diff --git a/src/workers/GeoCaptchaSolver.js b/src/workers/GeoCaptchaSolver.js index ed5efe3..c65d2f3 100644 --- a/src/workers/GeoCaptchaSolver.js +++ b/src/workers/GeoCaptchaSolver.js @@ -5,7 +5,6 @@ const crypto = require('crypto'); const fs = require("fs"); const homedir = require('os').homedir(); const dest_dir = homedir + "/wavs/" -// iframe.query_selector('.audio-captcha-track').inner_html() const AUDIO_CAPTCHA_TRACK = ".audio-captcha-track"; const CAPTCHA_CONTAINER = "#captcha-container"; const WAV_URL_REGEX = "https:.+.wav";