2016-02-25 168 views
1

我目前正在與phantomjs 2.1.1casper 1.1.0-beta5自動執行基本登錄過程。但是,我沒有最好的運氣。在下面,我可以成功填寫帶有值的表單,但是當我嘗試提交時會出現問題。我曾嘗試使用clickselectors等提交表單,但沒有結果。有關如何用下面的代碼成功登錄的任何想法?提交表單或單擊提交輸入不工作

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'error', 
    viewportSize: { 
     width: 1280, 
     height: 720 
    }, 
    pageSettings: { 
     ignoreSslErrors: true, 
     loadImages: false, // do not load images 
     loadPlugins: false, // do not load NPAPI plugins (Flash, Silverlight, ...) 
     webSecurityEnabled: false 
    } 
}); 

var x = require('casper').selectXPath; 
phantom.cookiesEnabled = true; 
var fs = require('fs'); 
var cookies = JSON.stringify(phantom.cookies); 
fs.write("cookies.txt", cookies, 644); 

casper.start('https://www.quora.com/login', function() { 
    this.sendKeys("input[name=email]", "[email protected]", { 
     keepFocus: true 
    }); 
    this.page.sendEvent("keypress", this.page.event.key.Tab); 
    this.sendKeys("input[name=password]", "xxxxxxx", { 
     keepFocus: true 
    }); 
}); 

casper.then(function() { 
    this.evaluate(function() { 
     document.getElementById('__w2_IXl7ObX_login_form').submit(); 
    }); 
}); 

casper.then(function() { 
    this.capture('test.png'); 
}); 

casper.run(); 

截圖

enter image description here

HTML

<form id="__w2_gptxdFS_login_form" class="inline_login_form" method="POST"> 
    <div class="title">Login</div> 
    <div class="form_inputs"> 
     <div class="form_column"> 
      <input id="__w2_gptxdFS_email" class="text header_login_text_box ignore_interaction" type="text" w2cid="gptxdFS" tabindex="1" name="email" placeholder="Email" group="__w2_gptxdFS_interaction"> 
     </div> 
     <div class="form_column"> 
      <input id="__w2_gptxdFS_password" class="text header_login_text_box ignore_interaction" type="password" w2cid="gptxdFS" tabindex="2" name="password" placeholder="Password" group="__w2_gptxdFS_interaction"> 
     </div> 
     <input id="__w2_gptxdFS_submit_button" class="submit_button ignore_interaction submit_button_disabled" type="submit" w2cid="gptxdFS" tabindex="4" value="Login" group="__w2_gptxdFS_interaction"> 
    </div> 
</form> 
+1

表單中是否有任何提交按鈕? –

+0

@jobinsjohn表單有一個提交輸入欄,標籤爲'login' – MaryCoding

+0

您可以粘貼頁面外觀樣式和表單的HTML代碼截圖嗎?我已經給出了一個解決方案,但需要一個按鈕才能出現,我認爲這是最主要的情況。您將有一個用戶名字段,一個密碼字段和一個說明登錄或登錄的按鈕。 – prabugp

回答

1

我相信下面的應該解決這個問題爲您提供:

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'debug', 
    viewportSize: { 
      width: 1280, 
     height: 720 
    }, 
    pageSettings: { 
     ignoreSslErrors: true, 
     loadImages: false, // do not load images 
     loadPlugins: false, // do not load NPAPI plugins (Flash, Silverlight, ...) 
     webSecurityEnabled: false, 
     localToRemoteUrlAccessEnabled: false 
    } 
}); 

casper.on('remote.message', function(msg) { 
    this.echo('remote message caught: ' + msg); 
}); 

casper.on('page.error', function(msg, trace) { 
    this.echo('Error: ' + msg, 'ERROR'); 
}); 

casper.start('https://www.quora.com', function() { 
    this.echo ('loggin in'); 
    this.fillSelectors('div.form_inputs', { 
     'input[type="text"]': '[email protected]', 
     'input[type="password"]': 'xxxxxxx' 
    }, false); 
}); 

casper.then(function() { 
    this.click('input.submit_button.ignore_interaction'); 
}).wait(5000, function(){}); 

casper.then(function() { 
    this.capture('test.png'); 
}); 

casper.run(); 

我跑這與casperjs --ignore-ssl-errors=true --ssl-protocol=any test.js 否則,我在調試模式下運行腳本時看到[warning] [phantom] Loading resource failed with status=fail (HTTP 500): https://www.quora.com/

上面的代碼後的截圖運行是:

Error message after clicking login

消息「找不到與此電子郵件帳戶」發生後,我們登錄。所以,在這種情況下,登錄點擊實際上正在工作。

在代碼中,我等待5秒鐘完成登錄調用,但是您可以等待登錄後發生的頁面中的某個html元素。

+0

只需要將SPA中的所有屏幕轉換爲PPT的人。我可以問'爲什麼這麼好奇'嗎? – prabugp

+0

啊。 「我們」在我們的團隊中與OP沒有任何關係。 – prabugp

+0

這確實工作完美。根據stackoverflow我不能獎賞賞金,直到時間到了。 – MaryCoding

1

發送\n(輸入密碼)在您的密碼,它應填寫後立即提交表格。

this.sendKeys("input[name=password]", "xxxxxxx\n", { 
     keepFocus: true 
    });