Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const {
- Builder,
- By,
- Capabilities
- } = require('selenium-webdriver')
- const chrome = require('selenium-webdriver/chrome')
- const path = require('path')
- const config = require('./config')
- const logger = require('./logger.js')
- const request = require('request-promise')
- const send = require('./sendResult')
- const http = require('https')
- const fs = require('fs')
- const spawn = require('child_process').spawn
- const mainlink = ''
- const pickspage = ''
- const identifs = {
- nameinput: 'input#user_name_id_module',
- passwordinput: 'input#user_password_id_module',
- buttonsend: 'input.auth_button',
- pickident: 'div[id^="pick"]',
- rcvident: '#rcv2_',
- openbtn: '#op_btn_',
- toarchive: '.user_pick_archive > a'
- }
- const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
- let options = new chrome.Options()
- options.addArguments('--user-data-dir=' + path.join(__dirname, 'chrome'))
- const driver = new Builder()
- .withCapabilities(Capabilities.chrome())
- .setChromeOptions(options)
- .build()
- module.exports.auth = async () => {
- try {
- await driver.get(mainlink)
- await sleep(1000)
- await driver.findElement(By.css(identifs.nameinput)).sendKeys(config.login)
- await driver.findElement(By.css(identifs.passwordinput)).sendKeys(config.password)
- await driver.findElement(By.css(identifs.buttonsend)).click()
- await sleep(2000)
- let urlnow = await driver.getCurrentUrl()
- autentification = ((!urlnow.indexOf('')!=-1)) ? true : false
- return true
- } catch (e) {
- return true
- }
- }
- module.exports.checkInformer = async () => {
- var chil = undefined
- let status = await driver.executeScript(() => {
- var informer = document.querySelector('div#info_floating.info_floating_active')
- // Если информер найден(по выборке), то возвращаем true
- return ((informer) ? true : false)
- })
- if (status) {
- try {
- await driver.findElement(By.css('div#info_floating.info_floating_active')).click()
- await sleep(2000)
- await driver.findElement(By.css('a[href=\'javascript:close_info_helper()\']')).click()
- } catch (e) {}
- }
- return status
- }
- const GetRecognize = (lnk) => new Promise((resolve, reject) => {
- var pat = lnk
- var pypat
- var pythonword
- if (config.platform.indexOf('win') != -1) {
- pypat = path.resolve(__dirname) + '\\imagerecognizer\\recognize.py'
- pythonword = 'python'
- } else {
- pypat = path.resolve(__dirname) + '/imagerecognizer/recognize.py'
- pythonword = 'python3'
- }
- var process = spawn(pythonword, [pypat, pat]);
- console.log('Ждем ответа скрипта')
- process.stdout.on('data', function (data) {
- if(data.toString().indexOf('OK') != -1){
- console.log('Ответ получен')
- const JSON_PATH = path.join(__dirname, '/imagerecognizer/result.json')
- let jsfile = JSON.parse(fs.readFileSync(JSON_PATH))
- let contr = jsfile.contora
- let ev = jsfile.event
- let pr = jsfile.prognoz
- let rz = jsfile.razmer
- let coeff = jsfile.coeff
- let symbolsreg = /(\\r\\n|\\n|\\r)/gm
- contr = contr.replace(symbolsreg,'')
- let evclear = /['"/\-_.\\`~$*&?@!]/gm
- let others = /['"/\-_\\`~$*&?@!]/gm
- ev = ev.replace(evclear, '')
- let otherclear = /\d(?=\D*$)/gm
- pr = pr.substr(0, pr.search(otherclear)+1)
- rz = rz.substr(0, rz.search(otherclear)+1)
- coeff = coeff.substr(0, coeff.search(otherclear)+1)
- pr = pr.replace(symbolsreg, '')
- rz = rz.replace(symbolsreg, '')
- coeff = coeff.replace(symbolsreg, '')
- ev = ev.replace(symbolsreg, '')
- contr = contr.replace(evclear,'')
- contr = contr.toUpperCase()
- pr = pr.replace(others, '')
- rz = rz.replace(others, '')
- let result = {
- event: ev,
- prognoz: pr,
- razmer: rz,
- coeff: coeff,
- contora: contr
- }
- resolve(result)
- }
- });
- });
- //..............TODO Переписать эту функцию
- const CheckPickImg = async (pickid) => {
- try {
- let imgsrc = await driver.executeScript(() => {
- // Находим прогноз
- var prg = document.getElementById('pick_' + arguments[0])
- //Пытаемся найти картинку в прогнозе
- var image = prg.getElementsByTagName('img')[0]
- return ((!!image)) ? image.getAttribute('src') : false
- }, pickid)
- //Нашли ли мы изображение
- if (!imgsrc){
- console.log('Изображений не найдено')
- return false
- }
- //Проверяем то ли изображение найдено
- if (imgsrc.indexOf('sales_protection') != -1) {
- console.log('Найдено изображение!')
- let link = mainlink + imgsrc
- let res = await driver.executeScript(() => {
- try {
- let locat = ''
- let evtype = ''
- let pick = document.querySelector('#pick_' + arguments[0])
- if (pick.querySelector('.sport')) {
- sport = pick.querySelector('.sport').textContent.replace(/\[...]/g, '').trim()
- }
- if (pick.querySelector('.comment_sub_name').childNodes[1]) {
- capper = pick.querySelector('.comment_sub_name').childNodes[1].textContent.trim()
- };
- let tte = '.tte' + arguments[0]
- let q = '.starts > ' + tte
- window.$(q).trigger('mouseover')
- time = document.querySelectorAll('div.date_hint tr')[3].textContent.replace('Событие:', '')
- try{
- if(pick.querySelector('.center')){
- evtype = pick.querySelector('.center').innerText
- }
- }catch(e){}
- if (pick.querySelector('.location')) {
- let locatdiv = pick.getElementsByClassName('location')[0]
- let dddd = locatdiv.getElementsByClassName('starts')[0]
- locatdiv.removeChild(dddd)
- locat = locatdiv.innerText
- }
- return [sport, locat, capper, time,evtype]
- } catch (e) {
- return null
- }
- }, pickid)
- console.log(res)
- let fromimg = await GetRecognize(link)
- if (res == null) {
- var result = {
- sport: '',
- location: '',
- evtype: '',
- event: fromimg.event,
- outcome: fromimg.prognoz,
- stake: fromimg.razmer,
- odds: fromimg.coeff,
- book: fromimg.contora,
- capper:'',
- time:'',
- }
- } else {
- var result = {
- sport: res[0],
- location: res[1],
- event: fromimg.event,
- outcome: fromimg.prognoz,
- stake: fromimg.razmer,
- odds: fromimg.coeff,
- book: fromimg.contora,
- capper:res[2],
- time:res[3],
- evtype:res[4]
- }
- }
- console.log('Send data:')
- console.log('Capper: ', result.capper)
- console.log(result)
- await send(result)
- await sleep(1000)
- await driver.get('')
- }
- }
- catch (e) {
- console.log('Картинки нет ')
- return false
- }
- return false
- }
- const CheckPickText = async (pickid) => {
- let result = await driver.executeScript(() => {
- let pick = document.querySelector('#pick_' + arguments[0])
- let sport
- let locat
- let event
- let outcome
- let stake
- let odds
- let book
- let capper
- let time
- let evtype = ''
- try {
- if (pick.querySelectorAll('.outcome').length == 0) {
- return false
- }
- if (pick.querySelector('.sport')) {
- sport = pick.querySelector('.sport').textContent.replace(/\[...]/g, '').trim()
- }
- if (pick.querySelectorAll('.event')[1]) {
- event = pick.querySelectorAll('.event')[1].innerHTML.replace(/></g, '> <').replace(/(<(\/?[^>]+)>)/g, '').replace('&', '').trim()
- }
- if (pick.querySelectorAll('.outcome')[1]) {
- outcome = pick.querySelectorAll('.outcome')[1].innerHTML.replace(/></g, '>|<').replace(/(<(\/?[^>]+)>)/g, '').trim()
- }
- if (pick.querySelectorAll('.stake')[1]) {
- stake = pick.querySelectorAll('.stake')[1].textContent.trim()
- }
- if (pick.querySelectorAll('.odds')[1]) {
- odds = pick.querySelectorAll('.odds')[1].innerHTML.replace(/<\/div><div/g, '</div>|<div').replace(/(<(\/?[^>]+)>)/g, '').trim()
- }
- if (pick.querySelectorAll('.book')[1]) {
- book = pick.querySelector('td.book img').src.split('books/')[1].split('.')[0]
- }
- if (pick.querySelector('.comment_sub_name').childNodes[1]) {
- capper = pick.querySelector('.comment_sub_name').childNodes[1].textContent.trim()
- }
- let tte = '.tte' + arguments[0]
- let q = '.starts > ' + tte
- window.$(q).trigger('mouseover')
- time = document.querySelectorAll('div.date_hint tr')[3].textContent.replace('Событие:', '')
- if (pick.querySelector('.location')) {
- let locatdiv = pick.getElementsByClassName('location')[0]
- let dddd = locatdiv.getElementsByClassName('starts')[0]
- locatdiv.removeChild(dddd)
- locat = locatdiv.innerText
- }
- try{
- if(pick.querySelector('.center')){
- evtype = pick.querySelector('.center').innerText
- }
- }catch(e){}
- return {
- sport,
- location: locat,
- event,
- outcome,
- stake,
- odds,
- book,
- capper,
- time,
- evtype: evtype
- }
- } catch (e) {
- return null
- }
- }, pickid)
- if (result == null || result == false) {
- console.log('Не найдено текста')
- return false
- } else {
- console.log('Найден текст')
- console.log('Отправляю данные:', result)
- console.log('Capper: ', result.capper)
- await send(result)
- await driver.get('' + pickid)
- return true
- }
- }
- const GetIframe = async (pickid) => {
- let capt = await driver.executeScript(() => {
- let div = document.getElementById('pick_' + arguments[0])
- if (!div) return false
- let capt = div.getElementsByTagName('iframe')[0]
- if (!capt) return false
- return (capt.getAttribute('src'))
- }, pickid)
- if (capt == false || capt == undefined) return false
- let linkcapt = capt
- // https://www.google.com/recaptcha/api2/anchor?ar=1&k=&co=aHR0cHM6Ly93d3cuYmV0b25zdWNjZXNzLnJ1OjQ0Mw..&hl=ru&v=75nbHAdFrusJCwoMVGTXoHoM&size=normal&cb=119l3nl29jkd
- let captkey = ((linkcapt.split('?')[1]).split('&')[1]).split('=')[1]
- return captkey
- }
- module.exports.getPick = async () => {
- let id = ''
- try {
- await driver.get(pickspage)
- if (!(await driver.getCurrentUrl() == pickspage)) return false
- await sleep(2000)
- let pick = await driver.findElement(By.css('div[id^="pick"]'))
- id = await pick.getAttribute('id')
- console.log('Найден прогноз')
- id = id.split('_')[1]
- // rcv2_27594077
- let btn = await driver.executeScript(() => {
- let pick = '#pick_' + arguments[0]
- let button = arguments[1] + arguments[0]
- let query = `${pick} ${button}`
- return (!!document.querySelector(query)) ? true : false
- }, id, identifs.openbtn)
- if (btn) {
- let button = await pick.findElement(By.css((identifs.openbtn + id))).click()
- }
- await sleep(4000)
- // here check img
- let img = await CheckPickImg(id)
- if (img == true) return true
- let text = await CheckPickText(id)
- if (text == true) return true
- // Ищем капчу
- let captsolver = ''
- let captkey = await GetIframe(id)
- if (captkey == false) {
- captsolver = true
- } else {
- captsolver = await RecaptSolver(captkey, id)
- }
- await sleep(2000)
- if (captsolver) {
- img = await CheckPickImg(id)
- if (img == true) return true
- text = await CheckPickText(id)
- if (text == true) return true
- await sleep(1000)
- return true
- } else {
- return false
- }
- } catch (e) {
- console.log(e)
- console.log('No pick')
- }
- }
- const AnticaptSend = async () => {
- let options = {
- method: 'POST',
- uri: 'https://api.anti-captcha.com/createTask ',
- body: config.anticaptcha,
- json: true
- }
- let response = await request(options)
- if (response.errorId == 0) {
- console.log('Anticaptcha task id =', response.taskId)
- return response.taskId
- }
- return false
- }
- const RecaptSolver = async (captkey, captid) => {
- let req = ''
- let response = await request.get(req)
- let recid = response.split('|')[1]
- let askid = ''
- let requr = ''
- let anticapt = await AnticaptSend()
- let checkanticapt = (!!anticapt) ? true : false
- let checkrucapt = (response.split('|')[0] == 'OK') ? true : false
- console.log(((checkanticapt) ? 'Solving in anticaptcha' : 'Solving in ') + ((checkanticapt && checkrucapt) ? ' and ' : '') + ((checkrucapt) ? 'rucaptcha' : ''))
- let hash = ''
- let solvedwith = ''
- var anticaptoptions = {
- method: 'POST',
- uri: ' ',
- body: {
- "clientKey": "",
- "taskId": parseInt(anticapt)
- },
- json: true
- }
- let time = Date.now()
- while (true) {
- if (checkrucapt) {
- requr = await request.get(askid)
- if (requr.indexOf('ERROR_CAPTCHA_UNSOLVABLE') != -1) checkrucapt == false
- if (requr.split('|')[0] == 'OK') {
- hash = requr.split('|')[1]
- solvedwith = 'RUCAPTCHA'
- break
- }
- }
- if (checkanticapt) {
- requr2 = await request(anticaptoptions)
- if (requr2.errorId != 0) {
- checkanticapt == false
- }
- if (requr2.status == 'ready') {
- hash = requr2.solution.gRecaptchaResponse
- solvedwith = 'ANTICAPTCHA'
- break
- }
- }
- if (!checkanticapt && !checkrucapt) break
- await sleep(2000)
- }
- console.log('Capt solved in ' + ((Date.now() - time) / 1000) + 'Solved with: ' + solvedwith)
- console.log((hash != '') ? 'Got hash' : 'No hash')
- await sleep(1000)
- try {
- let execut = await driver.executeScript(() => {
- var ea9ae70ghse698aegr90aerg = arguments[1];
- console.log(ea9ae70ghse698aegr90aerg)
- console.log(arguments[0])
- var div = document.getElementById('pick_' + ea9ae70ghse698aegr90aerg);
- var ea9ae70ghse698aegr90aerghhh = (parseInt(ea9ae70ghse698aegr90aerg) + parseInt(1291)) * 2;
- var argarg87aer8gawrg0867aeg = hex_md5(ea9ae70ghse698aegr90aerghhh + '9ae5gae965gae95rgaerg9rg6ae8r7698aer7g');
- var data = {
- gaerg6aerg9ae5rg789aeg: ea9ae70ghse698aegr90aerg,
- aergaer9g5aer8g75aer78g: argarg87aer8gawrg0867aeg
- };
- data['v2'] = true;
- data['grcv3t'] = arguments[0];
- JsHttpRequest.query('/openpicksub/', data, function (result, errors) {
- if (result.eragaer87g6ae89rgerg) {
- div.innerHTML = result['eragaer87g6ae89rgerg'];
- $(function () {
- $('#tt_container .tte' + ea9ae70ghse698aegr90aerg).tooltip({
- track: true,
- delay: 0,
- showURL: false,
- fade: 200,
- id: 'tt_style'
- })
- })
- }
- if (result.error) alert(result.error);
- if (result.is_reload) window.location.reload()
- }, true)
- }, hash, captid)
- await sleep(4000)
- } catch (e) {
- console.log(e)
- }
- return true
- }
Advertisement
Add Comment
Please, Sign In to add comment