2014-06-17 91 views
0

我正在寫一個python腳本,它將像params這樣的用戶名和密碼傳遞給我的casperjs腳本,如下所述。但我不知道爲什麼收到錯誤:將參數傳遞給casperjs並登錄到網站

CasperError: casper.test property is only available using the `casperjs test` command 
    C:/casperjs/modules/casper.js:179 

有人可以幫我解決這個問題嗎?

CasperJS.py:

import os 
import subprocess 

# PATH to files 
casperjs = 'c:\casperjs\bin\casperjs.exe' 
app_root = os.path.dirname(os.path.realpath(__file__)) 
script = os.path.join(app_root, 'test2.js') 

# Request username and password 
username = raw_input("Usuario:") 
password = raw_input("Senha:") 

# Username and password like 
auth = [username, password] 

# Execute process casperjs via python 
subprocess.Popen(['casperjs', script, auth[0], auth[1]], shell=True) 

CasperJS.js:

var casper = require('casper').create({ 
    clientScript: ['jquery.min.js'], 
    verbose: true, 
    logLevel: "debug", 
    // Disable load images 
    pageSettings: { 
    loadImages: true 
    } 
}); 

# variables 
var url = 'http://minha.oi.com.br'; 
var username = casper.echo(casper.cli.raw.get(0)); 
var password = casper.echo(casper.cli.raw.get(1)); 

# start casperjs 
casper.start(url); 

# Try login on the website 
casper.thenEvaluate(function(usuario, senha) { 
document.querySelector('input#Ecom_User_ID').setAttribute('value', usuario); 
document.querySelector('input#Ecom_Password').setAttribute('value', password); 

}, { usuario: username, senha: password }); 

# Check the current URL 
casper.then(function() { 
     this.echo(this.getCurrentUrl()); 
}); 
casper.run(); 

回答

1

問題是一個老版本沒有與casperjs正常工作phantomjs的。以下問題對問題中的代碼進行了更正。


你的腳本有多個問題

  • 你不能echo東西,並嘗試分配在casperjs腳本中的價值。因此,改變這些兩行:

    casper.echo(casper.cli.raw.get(0)); 
    casper.echo(casper.cli.raw.get(1)); 
    
    var username = casper.cli.raw.get(0); 
    var password = casper.cli.raw.get(1); 
    
  • 在同一個腳本:你的意見是Python中的註釋,而不是JS的意見,所以更改#//

  • 卡斯帕:你實際上應該選擇正確的輸入田:

    document.querySelector('input[name="Ecom_User_ID"]').setAttribute('value', usuario); 
    document.querySelector('input[name="Ecom_Password"]').setAttribute('value', senha); 
    

    甚至使用由casperjs提供的功能(更換整個thenEvaluate調用):

    this.fillSelectors("form[name='IDPLogin']", { 
        'input[name="Ecom_User_ID"]': username, 
        'input[name="Ecom_Password"]': password 
    }); 
    
  • 您可以將thenEvaluate電話更改爲:

    casper.thenEvaluate(function(usuario, senha) { 
        // setAttribute here like above 
    }, username, password); 
    
  • 在你的Python腳本,你不實際使用的casperjs變量,但因爲你認爲它是在PATH這很好。

如果錯誤仍然存​​在或新出現問題,嘗試升級到較新版本的phantomjs。


產生的代碼可能是這樣的:

var casper = require('casper').create(); 

// variables 
var url = 'http://minha.oi.com.br'; 
var username = casper.cli.raw.get(0); 
var password = casper.cli.raw.get(1); 

// start casperjs 
casper.start(url); 

// Try login on the website 
casper.then(function(){ 
    this.fillSelectors("form[name='IDPLogin']", { 
     'input[name="Ecom_User_ID"]': username, 
     'input[name="Ecom_Password"]': password 
    }, true); 
    // this also sents the form 
}); 

// Check the current URL 
casper.then(function() { 
    this.echo(this.getCurrentUrl()); 
}); 

casper.run(); 
+0

嗨,Artjom B,我改變我的腳本casperjs並取出casper.echo,但我不連續登錄到網站。 我的casperjs版本是1.1.0-beta3和phantomjs 1.9.1 –

+0

@RodrigoAndrade看到增加的第三點。你的選擇是錯的 –

+0

嗨,@Artjom B, 我嘗試這兩個樣本,我連續不能登錄到網站。我不知道這是真的,但我認爲變量usuario和密碼的價值沒有發送到輸入。 –