Mrage

btnn

Jan 14th, 2020
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const {
  2.     Builder,
  3.     By,
  4.     Capabilities
  5. } = require('selenium-webdriver')
  6. const chrome = require('selenium-webdriver/chrome')
  7. const path = require('path')
  8. const config = require('./config')
  9. const logger = require('./logger.js')
  10. const request = require('request-promise')
  11. const send = require('./sendResult')
  12. const http = require('https')
  13. const fs = require('fs')
  14. const spawn = require('child_process').spawn
  15. const mainlink = ''
  16. const pickspage = ''
  17. const identifs = {
  18.     nameinput: 'input#user_name_id_module',
  19.     passwordinput: 'input#user_password_id_module',
  20.     buttonsend: 'input.auth_button',
  21.     pickident: 'div[id^="pick"]',
  22.     rcvident: '#rcv2_',
  23.     openbtn: '#op_btn_',
  24.     toarchive: '.user_pick_archive > a'
  25. }
  26. const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
  27. let options = new chrome.Options()
  28. options.addArguments('--user-data-dir=' + path.join(__dirname, 'chrome'))
  29. const driver = new Builder()
  30.     .withCapabilities(Capabilities.chrome())
  31.     .setChromeOptions(options)
  32.     .build()
  33.  
  34. module.exports.auth = async () => {
  35.     try {
  36.         await driver.get(mainlink)
  37.         await sleep(1000)
  38.         await driver.findElement(By.css(identifs.nameinput)).sendKeys(config.login)
  39.         await driver.findElement(By.css(identifs.passwordinput)).sendKeys(config.password)
  40.         await driver.findElement(By.css(identifs.buttonsend)).click()
  41.         await sleep(2000)
  42.         let urlnow = await driver.getCurrentUrl()
  43.         autentification = ((!urlnow.indexOf('')!=-1)) ? true : false
  44.         return true
  45.     } catch (e) {
  46.         return true
  47.     }
  48.  
  49. }
  50.  
  51. module.exports.checkInformer = async () => {
  52.     var chil = undefined
  53.     let status = await driver.executeScript(() => {
  54.         var informer = document.querySelector('div#info_floating.info_floating_active')
  55.         // Если информер найден(по выборке), то возвращаем true
  56.         return ((informer) ? true : false)
  57.     })
  58.  
  59.     if (status) {
  60.         try {
  61.             await driver.findElement(By.css('div#info_floating.info_floating_active')).click()
  62.             await sleep(2000)
  63.             await driver.findElement(By.css('a[href=\'javascript:close_info_helper()\']')).click()
  64.         } catch (e) {}
  65.     }
  66.  
  67.     return status
  68. }
  69. const GetRecognize = (lnk) => new Promise((resolve, reject) => {
  70.     var pat = lnk
  71.     var pypat
  72.     var pythonword
  73.     if (config.platform.indexOf('win') != -1) {
  74.         pypat = path.resolve(__dirname) + '\\imagerecognizer\\recognize.py'
  75.         pythonword = 'python'
  76.  
  77.     } else {
  78.         pypat = path.resolve(__dirname) + '/imagerecognizer/recognize.py'
  79.         pythonword = 'python3'
  80.     }
  81.     var process = spawn(pythonword, [pypat, pat]);
  82.     console.log('Ждем ответа скрипта')
  83.     process.stdout.on('data', function (data) {
  84.         if(data.toString().indexOf('OK') != -1){
  85.         console.log('Ответ получен')
  86.         const JSON_PATH = path.join(__dirname, '/imagerecognizer/result.json')
  87.         let jsfile = JSON.parse(fs.readFileSync(JSON_PATH))
  88.         let contr = jsfile.contora
  89.         let ev = jsfile.event
  90.         let pr = jsfile.prognoz
  91.         let rz = jsfile.razmer
  92.         let coeff = jsfile.coeff
  93.         let symbolsreg = /(\\r\\n|\\n|\\r)/gm
  94.         contr = contr.replace(symbolsreg,'')
  95.         let evclear = /['"/\-_.\\`~$*&?@!]/gm
  96.        let others = /['"/\-_\\`~$*&?@!]/gm
  97.        ev = ev.replace(evclear, '')
  98.  
  99.        let otherclear = /\d(?=\D*$)/gm
  100.        pr = pr.substr(0, pr.search(otherclear)+1)
  101.        rz = rz.substr(0, rz.search(otherclear)+1)
  102.        coeff = coeff.substr(0, coeff.search(otherclear)+1)
  103.        pr = pr.replace(symbolsreg, '')
  104.        rz = rz.replace(symbolsreg, '')
  105.        coeff = coeff.replace(symbolsreg, '')
  106.        ev = ev.replace(symbolsreg, '')
  107.        contr = contr.replace(evclear,'')
  108.        contr = contr.toUpperCase()
  109.        pr = pr.replace(others, '')
  110.        rz = rz.replace(others, '')
  111.  
  112.        let result = {
  113.            event: ev,
  114.            prognoz: pr,
  115.            razmer: rz,
  116.            coeff: coeff,
  117.            contora: contr
  118.        }
  119.        resolve(result)
  120.    }
  121.    });
  122. });
  123. //..............TODO Переписать эту функцию
  124. const CheckPickImg = async (pickid) => {
  125.    try {
  126.        let imgsrc = await driver.executeScript(() => {
  127.            // Находим прогноз
  128.            var prg = document.getElementById('pick_' + arguments[0])
  129.            //Пытаемся найти картинку в прогнозе
  130.            var image = prg.getElementsByTagName('img')[0]
  131.            return ((!!image)) ? image.getAttribute('src') : false
  132.        }, pickid)
  133.        //Нашли ли мы изображение
  134.        if (!imgsrc){
  135.            console.log('Изображений не найдено')
  136.            return false
  137.        }
  138.        //Проверяем то ли изображение найдено
  139.        if (imgsrc.indexOf('sales_protection') != -1) {
  140.            console.log('Найдено изображение!')
  141.            let link = mainlink + imgsrc
  142.            let res = await driver.executeScript(() => {
  143.                try {
  144.                    let locat = ''
  145.                    let evtype = ''
  146.                    let pick = document.querySelector('#pick_' + arguments[0])
  147.                    if (pick.querySelector('.sport')) {
  148.                        sport = pick.querySelector('.sport').textContent.replace(/\[...]/g, '').trim()
  149.                    }
  150.                    
  151.                    if (pick.querySelector('.comment_sub_name').childNodes[1]) {
  152.                        capper = pick.querySelector('.comment_sub_name').childNodes[1].textContent.trim()
  153.                    };
  154.                    let tte = '.tte' + arguments[0]
  155.                    let q = '.starts > ' + tte
  156.                    window.$(q).trigger('mouseover')
  157.                    time = document.querySelectorAll('div.date_hint tr')[3].textContent.replace('Событие:', '')
  158.                    try{
  159.                        if(pick.querySelector('.center')){
  160.                            evtype = pick.querySelector('.center').innerText
  161.                        }
  162.                    }catch(e){}
  163.                    if (pick.querySelector('.location')) {
  164.                        let locatdiv = pick.getElementsByClassName('location')[0]
  165.                         let dddd = locatdiv.getElementsByClassName('starts')[0]
  166.                        locatdiv.removeChild(dddd)
  167.                        locat = locatdiv.innerText
  168.                    }
  169.                    return [sport, locat, capper, time,evtype]
  170.                } catch (e) {
  171.                    return null
  172.                }
  173.            }, pickid)
  174.            console.log(res)
  175.            let fromimg = await GetRecognize(link)
  176.  
  177.            
  178.            if (res == null) {
  179.                var result = {
  180.                        sport: '',
  181.                        location: '',
  182.                        evtype: '',
  183.                        event: fromimg.event,
  184.                        outcome: fromimg.prognoz,
  185.                        stake: fromimg.razmer,
  186.                        odds: fromimg.coeff,
  187.                        book: fromimg.contora,
  188.                        capper:'',
  189.                        time:'',
  190.                }
  191.            } else {
  192.                var result = {
  193.                    sport: res[0],
  194.                    location: res[1],
  195.                    event: fromimg.event,
  196.                    outcome: fromimg.prognoz,
  197.                    stake: fromimg.razmer,
  198.                    odds: fromimg.coeff,
  199.                    book: fromimg.contora,
  200.                    capper:res[2],
  201.                    time:res[3],
  202.                    evtype:res[4]
  203.                }
  204.            }
  205.            console.log('Send data:')
  206.            console.log('Capper: ', result.capper)
  207.            console.log(result)
  208.            await send(result)
  209.            await sleep(1000)
  210.            await driver.get('')
  211.  
  212.  
  213.        }
  214.  
  215.    }
  216.    catch (e) {
  217.        console.log('Картинки нет ')
  218.        return false
  219.    }
  220.    return false
  221. }
  222.  
  223. const CheckPickText = async (pickid) => {
  224.    let result = await driver.executeScript(() => {
  225.        let pick = document.querySelector('#pick_' + arguments[0])
  226.        let sport
  227.        let locat
  228.        let event
  229.        let outcome
  230.        let stake
  231.        let odds
  232.        let book
  233.        let capper
  234.        let time
  235.        let evtype = ''
  236.        try {
  237.            if (pick.querySelectorAll('.outcome').length == 0) {
  238.                return false
  239.            }
  240.            if (pick.querySelector('.sport')) {
  241.                sport = pick.querySelector('.sport').textContent.replace(/\[...]/g, '').trim()
  242.            }
  243.            
  244.            if (pick.querySelectorAll('.event')[1]) {
  245.                event = pick.querySelectorAll('.event')[1].innerHTML.replace(/></g, '> <').replace(/(<(\/?[^>]+)>)/g, '').replace('&', '').trim()
  246.            }
  247.  
  248.            if (pick.querySelectorAll('.outcome')[1]) {
  249.                outcome = pick.querySelectorAll('.outcome')[1].innerHTML.replace(/></g, '>|<').replace(/(<(\/?[^>]+)>)/g, '').trim()
  250.            }
  251.  
  252.            if (pick.querySelectorAll('.stake')[1]) {
  253.                stake = pick.querySelectorAll('.stake')[1].textContent.trim()
  254.            }
  255.  
  256.            if (pick.querySelectorAll('.odds')[1]) {
  257.                odds = pick.querySelectorAll('.odds')[1].innerHTML.replace(/<\/div><div/g, '</div>|<div').replace(/(<(\/?[^>]+)>)/g, '').trim()
  258.            }
  259.  
  260.            if (pick.querySelectorAll('.book')[1]) {
  261.                book = pick.querySelector('td.book img').src.split('books/')[1].split('.')[0]
  262.            }
  263.  
  264.            if (pick.querySelector('.comment_sub_name').childNodes[1]) {
  265.                capper = pick.querySelector('.comment_sub_name').childNodes[1].textContent.trim()
  266.            }
  267.            let tte = '.tte' + arguments[0]
  268.            let q = '.starts > ' + tte
  269.            window.$(q).trigger('mouseover')
  270.            time = document.querySelectorAll('div.date_hint tr')[3].textContent.replace('Событие:', '')
  271.            if (pick.querySelector('.location')) {
  272.                let locatdiv = pick.getElementsByClassName('location')[0]
  273.                let dddd = locatdiv.getElementsByClassName('starts')[0]
  274.                locatdiv.removeChild(dddd)
  275.                locat = locatdiv.innerText
  276.            }
  277.            try{
  278.                if(pick.querySelector('.center')){
  279.                    evtype = pick.querySelector('.center').innerText
  280.                }
  281.            }catch(e){}
  282.            return {
  283.                sport,
  284.                location: locat,
  285.                event,
  286.                outcome,
  287.                stake,
  288.                odds,
  289.                book,
  290.                capper,
  291.                time,
  292.                evtype: evtype
  293.            }
  294.        } catch (e) {
  295.            return null
  296.        }
  297.    }, pickid)
  298.  
  299.    if (result == null || result == false) {
  300.        console.log('Не найдено текста')
  301.        return false
  302.    } else {
  303.        console.log('Найден текст')
  304.        console.log('Отправляю данные:', result)
  305.        console.log('Capper: ', result.capper)
  306.        await send(result)
  307.        await driver.get('' + pickid)
  308.        return true
  309.  
  310.    }
  311. }
  312. const GetIframe = async (pickid) => {
  313.    let capt = await driver.executeScript(() => {
  314.        let div = document.getElementById('pick_' + arguments[0])
  315.        if (!div) return false
  316.        let capt = div.getElementsByTagName('iframe')[0]
  317.        if (!capt) return false
  318.        return (capt.getAttribute('src'))
  319.  
  320.    }, pickid)
  321.    if (capt == false || capt == undefined) return false
  322.    let linkcapt = capt
  323.    // https://www.google.com/recaptcha/api2/anchor?ar=1&k=&co=aHR0cHM6Ly93d3cuYmV0b25zdWNjZXNzLnJ1OjQ0Mw..&hl=ru&v=75nbHAdFrusJCwoMVGTXoHoM&size=normal&cb=119l3nl29jkd
  324.    let captkey = ((linkcapt.split('?')[1]).split('&')[1]).split('=')[1]
  325.    return captkey
  326. }
  327. module.exports.getPick = async () => {
  328.    let id = ''
  329.    try {
  330.        await driver.get(pickspage)
  331.        if (!(await driver.getCurrentUrl() == pickspage)) return false
  332.        await sleep(2000)
  333.        let pick = await driver.findElement(By.css('div[id^="pick"]'))
  334.        id = await pick.getAttribute('id')
  335.        console.log('Найден прогноз')
  336.        id = id.split('_')[1]
  337.        // rcv2_27594077
  338.        let btn = await driver.executeScript(() => {
  339.            let pick = '#pick_' + arguments[0]
  340.            let button = arguments[1] + arguments[0]
  341.  
  342.            let query = `${pick} ${button}`
  343.            return (!!document.querySelector(query)) ? true : false
  344.        }, id, identifs.openbtn)
  345.        if (btn) {
  346.            let button = await pick.findElement(By.css((identifs.openbtn + id))).click()
  347.  
  348.        }
  349.        await sleep(4000)
  350.        // here check img
  351.        let img = await CheckPickImg(id)
  352.        if (img == true) return true
  353.        let text = await CheckPickText(id)
  354.        if (text == true) return true
  355.      
  356.  
  357.        // Ищем капчу
  358.        let captsolver = ''
  359.        let captkey = await GetIframe(id)
  360.        if (captkey == false) {
  361.            captsolver = true
  362.        } else {
  363.            captsolver = await RecaptSolver(captkey, id)
  364.        }
  365.        await sleep(2000)
  366.        if (captsolver) {
  367.            img = await CheckPickImg(id)
  368.            if (img == true) return true
  369.            text = await CheckPickText(id)
  370.            if (text == true) return true
  371.            await sleep(1000)
  372.            return true
  373.        } else {
  374.            return false
  375.        }
  376.  
  377.    } catch (e) {
  378.        console.log(e)
  379.        console.log('No pick')
  380.    }
  381.  
  382. }
  383. const AnticaptSend = async () => {
  384.    let options = {
  385.        method: 'POST',
  386.        uri: 'https://api.anti-captcha.com/createTask ',
  387.        body: config.anticaptcha,
  388.        json: true
  389.    }
  390.    let response = await request(options)
  391.    if (response.errorId == 0) {
  392.        console.log('Anticaptcha task id =', response.taskId)
  393.        return response.taskId
  394.    }
  395.    return false
  396. }
  397. const RecaptSolver = async (captkey, captid) => {
  398.    let req = ''
  399.    let response = await request.get(req)
  400.    let recid = response.split('|')[1]
  401.    let askid = ''
  402.    let requr = ''
  403.    let anticapt = await AnticaptSend()
  404.    let checkanticapt = (!!anticapt) ? true : false
  405.    let checkrucapt = (response.split('|')[0] == 'OK') ? true : false
  406.    console.log(((checkanticapt) ? 'Solving in anticaptcha' : 'Solving in ') + ((checkanticapt && checkrucapt) ? ' and ' : '') + ((checkrucapt) ? 'rucaptcha' : ''))
  407.    let hash = ''
  408.    let solvedwith = ''
  409.    var anticaptoptions = {
  410.        method: 'POST',
  411.        uri: ' ',
  412.        body: {
  413.            "clientKey": "",
  414.            "taskId": parseInt(anticapt)
  415.        },
  416.        json: true
  417.    }
  418.    let time = Date.now()
  419.  
  420.    while (true) {
  421.        if (checkrucapt) {
  422.            requr = await request.get(askid)
  423.            if (requr.indexOf('ERROR_CAPTCHA_UNSOLVABLE') != -1) checkrucapt == false
  424.            if (requr.split('|')[0] == 'OK') {
  425.                hash = requr.split('|')[1]
  426.                solvedwith = 'RUCAPTCHA'
  427.                break
  428.            }
  429.        }
  430.        if (checkanticapt) {
  431.            requr2 = await request(anticaptoptions)
  432.            if (requr2.errorId != 0) {
  433.                checkanticapt == false
  434.            }
  435.            if (requr2.status == 'ready') {
  436.                hash = requr2.solution.gRecaptchaResponse
  437.                solvedwith = 'ANTICAPTCHA'
  438.                break
  439.            }
  440.        }
  441.        if (!checkanticapt && !checkrucapt) break
  442.        await sleep(2000)
  443.  
  444.    }
  445.    console.log('Capt solved in ' + ((Date.now() - time) / 1000) + 'Solved with: ' + solvedwith)
  446.    console.log((hash != '') ? 'Got hash' : 'No hash')
  447.    await sleep(1000)
  448.    try {
  449.        let execut = await driver.executeScript(() => {
  450.            var ea9ae70ghse698aegr90aerg = arguments[1];
  451.            console.log(ea9ae70ghse698aegr90aerg)
  452.            console.log(arguments[0])
  453.            var div = document.getElementById('pick_' + ea9ae70ghse698aegr90aerg);
  454.            var ea9ae70ghse698aegr90aerghhh = (parseInt(ea9ae70ghse698aegr90aerg) + parseInt(1291)) * 2;
  455.            var argarg87aer8gawrg0867aeg = hex_md5(ea9ae70ghse698aegr90aerghhh + '9ae5gae965gae95rgaerg9rg6ae8r7698aer7g');
  456.            var data = {
  457.                gaerg6aerg9ae5rg789aeg: ea9ae70ghse698aegr90aerg,
  458.                aergaer9g5aer8g75aer78g: argarg87aer8gawrg0867aeg
  459.            };
  460.            data['v2'] = true;
  461.            data['grcv3t'] = arguments[0];
  462.            JsHttpRequest.query('/openpicksub/', data, function (result, errors) {
  463.                if (result.eragaer87g6ae89rgerg) {
  464.                    div.innerHTML = result['eragaer87g6ae89rgerg'];
  465.                    $(function () {
  466.                        $('#tt_container .tte' + ea9ae70ghse698aegr90aerg).tooltip({
  467.                            track: true,
  468.                            delay: 0,
  469.                            showURL: false,
  470.                            fade: 200,
  471.                            id: 'tt_style'
  472.                        })
  473.                    })
  474.                }
  475.                if (result.error) alert(result.error);
  476.                if (result.is_reload) window.location.reload()
  477.            }, true)
  478.        }, hash, captid)
  479.        await sleep(4000)
  480.    } catch (e) {
  481.        console.log(e)
  482.    }
  483.    return true
  484. }
Advertisement
Add Comment
Please, Sign In to add comment