Есть функция на phantomJS:
var page = require('webpage').create();
var system = require("system");
var args = system.args;
var email = args[1];
var password = args[2];
var wallet_id = args[3];
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0';
function login() {
page.open('https://site.com/login', function () {
page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {
page.evaluate(function(email, password){
var captcha = document.querySelector('.g-recaptcha');
//IF CAPTCHA
if (captcha) {
var sitekey = captcha.getAttribute('data-sitekey');
//query params for anti-captcha
var task = {"type":"NoCaptchaTaskProxyless",
"websiteURL":"https://site.com/login",
"websiteKey": sitekey};
var clientKey = 'ключ';
var not_json = {'clientKey':clientKey, 'task':task};
var json_data = JSON.stringify(not_json);
setTimeout(function(){
$.ajax({
method: 'post',
data: json_data,
dataType: 'json',
url: 'https://api.anti-captcha.com/createTask',
success: function(data){
if (data.taskId) {
var time = 0;
//check anti-captcha answer for creating task
var interval = setInterval(function(){
var j = {"clientKey":"key","taskId":data.taskId};
var j = JSON.stringify(j);
$.ajax({
//ajax query to anticaptcha service
success: function(data){
if (data.status == 'ready') {
clearInterval(interval);
//HERE IS LOGGIN IN
document.querySelector('#g-recaptcha-response').textContent = data.solution.gRecaptchaResponse;
document.querySelector("[name='password']").value = password;
document.querySelector("[name='email']").value = email;
document.querySelector("[type='submit']").click();
}
}
});
time+=5;
}, 5000);
}
}
});
}, 3500);
}
//IF THERE S NO CAPTCHA, JUST LOGGIN IN
else {
document.querySelector("[name='password']").value = password;
document.querySelector("[name='email']").value = email;
document.querySelector("[type='submit']").click();
}
}, email, password);
});//includeJs
}); //open
}
function wallet() {
var url = "https://site.com/account";
page.open(url, function (status) {
//check #btn exists on this URL (bool) (for check user login)
var progressing = page.evaluate(function () {
return document.querySelector("#btn");
});
//if #btn, do that
if (progressing) {
page.open('https://site.com/account', function (status) {
page.evaluate(function(){
//here is some action with account
});
setTimeout(function(){
//print result, exit script
console.log('1:'+email);
phantom.exit();
}, 10000);
});
//if #btn doesnt exists on DOM
} else {
//print result, finish script
phantom.exit();
}
});
}
//login in()
login();
//timeout for wallet()
setTimeout(function(){
wallet();
}, 150000);
Как известно из документации к phantomJS, page.evaluate = sandbox функция, из нее нельзя получить другие объекты.
Проблема данного скрипта в том, что при наличии капчи, скрипт делает запрос к сервису антикапчи, который может вернуть ответ как через 5 секунд, так и через 100. Моя задача - сделать так, чтобы на login() сделать callback функцию wallet(), сейчас же (в самом низу кода) сделано так, что сначала вызывается login(), а через 150 секунд wallet(). Это не совсем правильно, поэтому хочу узнать, как правильно это сделать? Если сделать функцию, которая будет в коде идти после page.evaluate(), то я получу сначала выполнение этой функции, а затем уже выполнение page.evaluate(), что в данной ситуации неприемлимо. Как быть, что делать?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день Проблема: не могу установить gulp-sass в готовой сборке gulpгуглил, пробовал разные варианты
Ради интереса хочю спросить а какие платежные системы используют порносайты? Наколько я знаю в се сайты подобной тематики действуют не законно,...
Доброго времени суток! Ребята, помогите, возможно это банально, но я не вкурю как это сделать
У меня в разработке веб-сайт, основаный на переводах слов с разных языков в другиеПроблема что это будет по сути максимально открытый словарь,...