/** * 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) }) }())