Как войти, заполнив форму в CasperJs

Ниже приведен hlml формы входа, которая у меня есть.

<div class="login_area_user">

            <form method="post" action="https://www.tradus.com/login?dest_url=https://www.tradus.com/cart/select-address" id="user-login">
            <input type="hidden" value="1" name="form_submit">

                <h3 style="display:inline-block;">Already a Member</h3>

                <p id="login-main-center-right-descp">You can use tradus login id and password</p>

                <div class="login-row">
                    <label class="colorBlack">Email / Login*</label>
                    <input class="login-field" type="text" name="name" id="edit-namepopup">
                </div> <!-- [/login-row] -->

                <div class="login-row">
                    <label>Password</label>
                    <input class="login-field" type="password" id="edit-passpopup" name="pass">
                </div> <!-- [/login-row] -->

                <div class="login-row">            
                    <a class="forgotPassword" href="/forgot_password">Forgot your password?</a>
                    <!--input type="checkbox" name="remember" /><span>Remember me</span-->
                </div>

                <div class="login-row">
                    <input class="login-button" value="Login" type="submit">
                </div>

                <input type="hidden" name="op" value="Log in">

            </form>

        </div>

Я использую следующий код для входа:

this.fill('form#user-login', {
        'form_submit':    1,
        'name':    '[email protected]',
        'pass':   'pwd',
        'op':       'Log in'

    }, true);

Но я не думаю, что это делает вещь для меня.


person user2129794    schedule 07.09.2013    source источник
comment
Попробуйте использовать --ignore-ssl-errors=true и --web-security=false в качестве конфигурации phantomJS.   -  person sudipto    schedule 16.09.2013
comment
Возможный дубликат Как войти на веб-сайт с помощью CasperJS?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.11.2015


Ответы (3)


casper.waitForSelector("form input[name='name']", function() {
    this.fillSelectors('form#user-login', {
        'input[name = name ]' : '[email protected]',
        'input[name = pass ]' : 'pwd'
    }, true);
});

Просто используйте это (см. waitForSelector docs). Во-первых, дождитесь загрузки формы. Затем заполните форму с помощью селекторов.

person Shikhar    schedule 05.02.2014

На случай, если кто-нибудь еще обнаружит это. Я использовал некоторую комбинацию этих ответов - моя форма входа также была в iframe, что добавило некоторых трудностей, но в основном проблема, которую я видел (вход на основе файлов cookie), заключается в том, что Каспер переходил к следующему шагу прежде чем сервер сможет ответить и установить файл cookie. Я добавил несколько обратных вызовов .wait(), чтобы обеспечить достаточно времени для получения этого файла cookie. Это может быть не надежно, но у меня еще не было проблем с этим

Имейте в виду, что куки необходимо устанавливать при КАЖДОМ ПОСЛЕДОВАТЕЛЬСТВЕ.

casper.start(config.loginUrl, function() {

console.log("Checking login status @ " + config.loginUrl);

// set a wait condition to make sure the page is loaded (particularly iframe in my case) 
this.wait(5000,function(){

    // switch to iframe (won't be necessary for most)
    this.page.switchToChildFrame('login'); 

    // fill out the form 
    this.fillSelectors("form[name='loginForm']",{
        'input#txtUsername' : config.username,
        'input#txtPassword' : config.password
    });

    // click the login button 
    console.log("Logging In...")
    this.click('input.button.login');

    // ** give my crappy dev server 5 seconds to respond
    this.wait(5000,function(){
    console.log('Starting to spider ' + dataObj.start)

    // do yo dance  
    spider(dataObj.start);
    });
person twill    schedule 11.09.2014
comment
Это помогло мне найти решение моей проблемы stackoverflow.com/questions/40402888/ - person Christian Michael; 04.11.2016

Хммм.. Следуйте за этим:

casper.then(function () {
    this.evaluate(function () {
        $('form#user-login').submit();
    });
});
person ringular    schedule 24.10.2013
comment
это кажется ответом на предыдущий ответ, но неясно, какой именно, поскольку порядок меняется непредсказуемо (в зависимости от того, как пользователь сортирует ответы, и от колеблющихся значений, которые они получают, и от новых ответов, поступающих между этим и тем, на который он ссылается к и др.) - person iconoclast; 11.06.2015