2016-02-26 50 views
1

我們正在進行一些測試,以使用Phantomjs 2.0連接到salesforce.com。 它工作的很好,但在過去幾周salesforce.com不斷要求每次新會話的驗證碼。使用Phantomjs 2.0登錄到salesforce.com繼續要求驗證碼

有沒有人遇到同樣的問題?

+1

你是否檢查過他們允許這樣的事情?另外,*「有人遇到同樣的問題?」*不是一個特別有用的問題。什麼是您的實際*編程*問題? –

+0

我們遇到了使用Phantomjs 2.0在Salesforce.com上運行selenium腳本的問題。每當我們在本地運行腳本時,我們都會得到驗證屏幕。 –

回答

1

您可以將您的IP地址列入白名單,以阻止Salesforce詢問驗證碼。 前往設置 - >安全 - >網絡訪問並將您的IP添加到白名單。

enter image description here

+0

不幸的是,由於安全策略,這不是我們的選擇。 –

1

這也許應該是一個評論,但我沒有必要點意見,請原諒「答案」。這是一個可行的答案,因爲我不是很精通casper/phantom,所以我會更新嘗試的解決方案。希望我的嘗試會幫助別人。

是否有人遇到同樣的問題?

答:

問題:作爲Salesforce Spring '16 update從新的瀏覽器登錄到SF時SF認證用的驗證代碼的用戶(可以用一個新的瀏覽器eg.firefox進行測試) 。奇怪的是,這個問題不會在隱身會話中複製。

建議的解決方案:創建一個cookie文件&用casper/phantom腳本登錄SF。將身份驗證保存到JS cookie文件,否則每次登錄都需要驗證。

測試步驟:

  1. 我們可以看到使用卡斯帕/幻覈銷單。

    var fs = require('fs'); //top of script 
    var html = this.getHTML(); //place this in wait_function() after login() 
    fs.write('./output.html', html, 'w'); 
    
  2. 現在,我們可以「補」覈銷單用電子郵件發送代碼

    this.click('phSearchInput', function() { //'phSearchInput' found in above extract 
    this.fill('form', { 
    'phSearchInput' : '*verification_number_here*' 
    }, true); 
    

    2.1似乎是與驗證後的最終重定向的問題。我不知道我能給這個多少時間(因爲它不是優先事項),我對JS很新。我會留下代碼以供參考/測試

    /*Altered from http://blog.deadlypenguin.com/blog/2013/07/09/logging-into-salesforce-with-casperjs/ */ 
    
    var LOGIN_URL, LOGIN_USERNAME, LOGIN_PASSWORD, casp; 
    
    casp = require('casper').create({ 
        viewportSize: { 
          width: 1024, 
          height: 768 
        }, 
        verbose: true, 
        logLevel: 'debug' 
    }); 
    
    casp.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'); 
    
    if (!casp.cli.has('username') && !casp.cli.has('password')) { 
        casp.echo('Usage: $ casperjs sfdclogin.casper.js --username=USERNAME --password=PASSWORD [--prod]').exit(-1); 
    } 
    
    if (casp.cli.has('prod')) { 
        LOGIN_URL = 'https://test.salesforce.com//'; 
    } else { 
        LOGIN_URL = 'https://test.salesforce.com/'; 
    } 
    
    LOGIN_USERNAME = casp.cli.get('username'); 
    LOGIN_PASSWORD = casp.cli.get('password'); 
    
    casp.start(LOGIN_URL, function() { 
    
        this.log('Logging in', 'debug'); 
        //login 
        this.fill('form', { 
          'username': LOGIN_USERNAME, 
          'pw': LOGIN_PASSWORD 
        }, true); 
    
        this.log('Logged in', 'debug'); 
    }); 
    
    casp.wait(5000, function() { 
    
        this.log('Varification START', 'debug'); 
        this.fill('form', { 
          'emc': '*verification_number_here*' 
        }, true); 
    
        this.captureSelector('test.png', 'html'); 
        this.log('Varification FINISHED', 'debug'); 
        this.wait(6000) 
    
    }, 12000); 
    
    casp.then(function() { 
    //casp.waitForUrl('https://cs31.salesforce.com/home/home.jsp', function() { 
    
        this.log('Are we logged in??'); 
        this.captureSelector('test2.png', 'html'); 
    
    }, 12000); 
    
    casp.run(); 
    
  3. 添加一個cookie文件,希望驗證驗證保存在那裏。 (當我找出步驟3時,我會做到這一點)。