Можно использовать вход через casperjs в Facebook, но захватывать в png только показывать навигационную панель
Можно использовать вход через casperjs в Facebook, но захватить в png только показать панель навигации это мой код: facebook.js
casper.start("http://www.facebook.com/login.php", function(response) {
if (this.exists('[name="lsd"]')) {
this.page.evaluate(function(a,b) {
document.querySelector("input[name='email']").value = a
document.querySelector("input[name='pass']").value = b;
document.querySelector("#login_form").submit();
console.log("Login submitted!");
},user_email,user_pass);
} else {
this.echo('[name="lsd"] not found', 'ERROR');
phantom.exit();
}
this.capture('img/'+user_email+'_login.png');
});
casper.run();
пожалуйста, помогите мне решить проблему.
1 ответ
Проблема в том, что вы сразу захватываете страницу после отправки формы авторизации. Вам нужно немного подождать, пока загрузится новая страница, но это не единственная проблема с Facebook.
Вам нужно запустить CasperJS так:
casperjs --ssl-protocol=tlsv1 facebook.js
из-за недавней уязвимости POODLE SSL. ( Другой ответ)
Когда вы регистрируетесь на
page.error
Вы видите несколько ошибок, которые говорят, чтоbind
не доступен. Для этого вам понадобится прокладка, чтобы Facebook работал нормально. Я предоставил решение для вставки копии здесь.
А теперь вопрос ожидания загрузки страницы... Есть несколько решений для этого.
Добавить шаг
Это самое простое и работает с большинством не-одностраничных приложений.
casper.start("http://www.facebook.com/login.php", function(response) {
this.page.evaluate(function(a,b) {
// login
}, user_email, user_pass);
}).then(function(){
this.capture('img/'+user_email+'_login.png');
}).run();
Ждите селектора, который существует только на новой странице
Это самый надежный способ и работает на всех страницах.
casper.start("http://www.facebook.com/login.php", function(response) {
this.page.evaluate(function(a,b) {
// login
}, user_email, user_pass);
}).waitForSelector("SOMESELECTORLIKEPROFILEBUTTON", function(){
this.capture('img/'+user_email+'_login.png');
}).run();
Подожди статическое количество времени
Это наименее надежный, но самый простой. Вы можете ждать дольше, чем необходимо, или недостаточно долго, чтобы операция не удалась.
casper.start("http://www.facebook.com/login.php", function(response) {
this.page.evaluate(function(a,b) {
// login
}, user_email, user_pass);
}).wait(4000, function(){
this.capture('img/'+user_email+'_login.png');
}).run();
Примечание: я использую синтаксис обещания, но это не обязательно.