61 lines
1.8 KiB
JavaScript
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)
|
|
})
|
|
}())
|