AutoClickJS/screenshot.js

61 lines
1.8 KiB
JavaScript

/**
* NOTE: install "dark mode" on browser because tesseract need contract to detect text
* NOTE: zoom 120% on browser because below
*/
const screenshot = require('screenshot-desktop') // capture screen
const robotjs = require('robotjs')
const tesseract = require('tesseract.js')
const jsdom = require('jsdom')
const KEYWORD = 'ebay.com'
async function handleToClick(keywordToClick, fileScreenshot = 'screenshot.jpg') {
if(!fileScreenshot) {
fileScreenshot = 'screenshot.jpg'
}
const _randomInteger = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
return new Promise((res, rej) => {
screenshot({filename: fileScreenshot}).then((imgPath) => {
tesseract.recognize(imgPath)
.then(({data: {hocr, text}}) => {
console.log({hocr, text})
const dom = new jsdom.JSDOM(hocr)
const spanEls = dom.window.document.querySelectorAll('span')
for(let i = 0; i < spanEls.length; i++) {
const span = spanEls[i];
const text = span.textContent.split(' ').join('')
if(text.includes(keywordToClick)) {
const [type, left, bottom, right, top] = span.title.split(' ')
robotjs.moveMouse(
_randomInteger(10, 50) + parseInt(left), // randomInteger is prefix depreciation
parseInt(top),
)
robotjs.mouseClick()
console.log(text)
return res(true)
}
}
return rej(false)
})
})
});
}
(function recusiveScroll(countScroll = 0, limitStopScroll = 20) {
if(countScroll > limitStopScroll) {
return;
}
const [x, y] = [0, -3]
handleToClick(KEYWORD).catch(() => {
recusiveScroll(++countScroll, limitStopScroll)
}).finally(() => {
robotjs.scrollMouse(x, y)
})
}())