Можно использовать вход через 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.

  1. Вам нужно запустить CasperJS так:

    casperjs --ssl-protocol=tlsv1 facebook.js
    

    из-за недавней уязвимости POODLE SSL. ( Другой ответ)

  2. Когда вы регистрируетесь на 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();

Примечание: я использую синтаксис обещания, но это не обязательно.

Другие вопросы по тегам