2017-01-09 9 views
0

Попытка войти в систему admin.booking.com и отказаться от всех бронирований моего отеля со страницы бронирования. Но дело в том, что когда я вхожу в систему с помощью CasperJS или из нового места (новый браузер), он запрашивает подтверждение по телефону. Перенаправление страницы резервирования на страницу проверки телефона. Вот мой кодВеб-сайт, запрашивающий код подтверждения при входе в систему, используя casperjs или новый браузер

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'debug', 
    viewportSize: {width: 950, height: 950} 
}); 

casper.userAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'); 

casper.start('https://admin.booking.com/', function() { 
    //this.captureSelector('bhuwan1.png', 'body'); 
}); 

casper.then(function(){ 

    this.evaluate(function(){ 

     document.getElementById("loginname").value="1123123"; 
     document.getElementById("password").value="*******"; 
    }); 
}); 



casper.then(function(){ 

//$("button").eq(1).click(); 
this.click('button.btn-primary'); 
//this.wait(10000); 
    console.log("first wait for 10sec"); 
}); 

casper.then(function(){ 
    this.wait(10000); 
}); 


casper.then(function(){ 

var ses = this.getCurrentUrl().split("ses=")[1].split("&")[0]; 
console.log(ses); 
//this.wait(10000); 
console.log("first wait for 10sec"); 
var url = "https://admin.booking.com/hotel/hoteladmin/extranet_ng/manage/search_reservations.html?stay_to=2017-01-08&stay_from=2017-01-07&type=arrival&hotel_id=xxxxx&ses="+ses; 

console.log(url); 

this.evaluate(function(url){ 
var newDiv = document.createElement("div"); 
    var newContent = document.createElement("a"); 

newContent.setAttribute("href",url); 
    newContent.innerText="button"; 
    newDiv.appendChild(newContent); 

    document.body.appendChild(newDiv); 
    this.wait(10000); 


},url); 

}); 

casper.then(function(){ 

this.clickLabel("button",'a'); 
}); 


casper.then(function(){ 
    this.wait(10000); 
    console.log("first wait for 10sec"); 

    this.capture('stack15.png', { 
     top: 0, 
     left: 0, 
     width:1000, 
     height: 2000 
    }); 

    this.captureSelector('bhuwan15.png', 'body'); 

}); 



casper.run(); 

Как избежать страницу подтверждения номера телефона и входа в систему, как если бы его получать авторизовались от знакомого или старого браузера?

ответ

1

Предлагаю вам использовать аутентификацию, основанную на файле cookie. Вам нужно найти минимальное количество файлов cookie, необходимых для поддержания вашей сессии. После этого, вам нужно добавить в ваш скрипт что-то вроде:

phantom.cookies = [{// an array of objects 
    'name'  : 'theAuthCookie', 
    'value' : '<very long string>', 
    'domain' : 'www.wikifolio.com', 
    'path'  : '/', 
    'httponly' : false, 
    'secure' : true, 
    'expires' : (new Date()).getTime() + (1000 * 60 * 60 * 43800) //5 years 
},{ 'name'  : 'DisclaimerCountryPopupV2', 
    'value' : 'de', 
    'domain' : 'www.wikifolio.com', 
    'path'  : '/', 
    'httponly' : false, 
    'secure' : true, 
    'expires' : (new Date()).getTime() + (1000 * 60 * 60 * 43800) }] 

Смотрите также: this issue

Вы также должны использовать --cookies-file вариант:

./casperjs --cookies-file=./my_file test.js >/dev/stdout 


Вы должны использовать --debug=true параметр командной строки, если есть какие-либо проблемы.

Эти обратные вызовы также могут быть полезны:

casper 
.on("error", function(msg){ this.echo("error: " + msg, "ERROR") }) 
.on("page.error", function(msg, trace){ this.echo("Page Error: " + msg, "ERROR") }) 
.on("remote.message", function(msg){ this.echo("Info: " + msg, "INFO") }) 
.on("resource.error", function(resourceError){ 
    console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')'); 
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString); 
}); 

+1

как использовать опцию печенье файла, что является my_file – Bhuwan

+0

'--cookies-файл =/путь/к/cookies.txt' указывает имя файла для хранения постоянных файлов cookie. PhantomJS - [Параметры командной строки] (http://phantomjs.org/api/command-line.html). Я также думаю, что это может не понадобиться, или вы можете попробовать его, не настраивая 'phantom.cookies'. –

+1

без настройки phatom.cookies он работал, просто передал все файлы cookie в файлы cookie.txt. Спасибо – Bhuwan