Comment se connecter en remplissant le formulaire dans CasperJs

Voici le hlml du formulaire de connexion que j'ai

<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> 

Utilisez le code suivant pour vous connecter:

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

Mais je ne fais rien pour moi.

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

Utilisez simplement ceci (voir les documents waitForSelector ). Tout d'abord, attendez que le formulaire soit chargé. Ensuite, remplissez le formulaire à l'aide des sélecteurs.

 casper.waitForSelector('form', function(){ this.fill('form', { 'name': '[email protected]', 'pass': 'pwd'}, true); }); <!-- wait until a form tag disappears --> casper.waitWhileSelector('form', function(){ this.echo('selector is no more!'); }); casper.then(function(){ this.echo(this.getTitle()); }); 

Dans le cas où quelqu'un d'autre trouve cela … J'ai utilisé une combinaison de ces réponses – mon formulaire de connexion était également dans un iframe qui a ajouté quelques difficultés, mais essentiellement le problème que j'ai vu (connexion basée sur les cookies) est que Casper allait à l'étape suivante Avant que le serveur puisse répondre et configurer le cookie. J'ai ajouté des rappels de .wait () pour assurer un temps suffisant pour obtenir ce cookie. Il se peut qu'il contienne quelques imprécisions par rapport à l'original. Nous espérons néanmoins que cela vous aidera dans vos recherches.

Attention, le cookie doit être défini TOUT CRAWL

 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); }); 

Hmmm … Suivez cela avec:

 casper.then(function () { this.evaluate(function () { $('form#user-login').submit(); }); });