2012-06-19 67 views
5

我是通用的phantomjs,Java腳本和WebScraping的新手。我想要做的是基本的http認證,然後訪問另一個URL來獲取一些信息。這是我迄今爲止所擁有的。請告訴我我做錯了什麼。使用phantomjs和Jquery登錄到網頁

var page = require('webpage').create(); 
var system = require('system'); 

page.onConsoleMessage = function(msg) { 
    console.log(msg); 
}; 

page.onAlert = function(msg) { 
    console.log('alert!!>' + msg); 
}; 

page.settings.userName = "foo"; 
page.settings.password = "bar"; 

page.open("http://localhost/login", function(status) { 
    console.log(status); 
    var retval = page.evaluate(function() { 
     return "test"; 
    }); 
    console.log(retval); 

    page.open("http://localhost/ticket/" + system.args[1], function(status) { 
     if (status === "success") { 
      page.injectJs("jquery.min.js"); 
      var k = page.evaluate(function() { 
       var a = $("div.description > h3 + p"); 

       if (a.length == 2) { 
        console.log(a.slice(-1).text()) 
       } 
       else { 
        console.log(a.slice(-2).text()) 
       } 
      //return document.getElementById('addfiles'); 
      }); 

     } 
    }); 
    phantom.exit(); 
}); 

我給這個文件傳遞一個參數:附加到第二個URL的票號。

+0

有關於這個話題我目前正在經歷在谷歌論壇的討論。我可能會提出一個與此相關的要點:https://groups.google.com/forum/?fromgroups=#!topic/phantomjs/20z8N8rwITw –

回答

9

我會爲此推薦CasperJS

CasperJS是一個開源的導航腳本&測試工具Javascript編寫的基於PhantomJS - 編寫腳本的無頭WebKit引擎。它簡化定義一個完整的導航方案的過程,並提供有用的高級功能,方法&語法糖做普通任務,如:

  • 定義&排序瀏覽導航步驟
  • 填寫&提交表單
  • 點擊&以下鏈接
  • 捕獲頁面的屏幕截圖(或它的一部分)
  • 測試遠程DOM
  • 記錄事件
  • 下載資源,包括二進制的
  • 編寫功能測試套件,節省結果的JUnit XML
  • 刮的網頁內容

(從CasperJS網站)

我最近花了一天的時間嘗試讓PhantomJS自己做一些事情,比如填寫登錄表單和無轉到下一頁。

CasperJS有形式建成,以及一個不錯的API目的:

http://docs.casperjs.org/en/latest/modules/casper.html#fill

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

casper.start('http://some.tld/contact.form', function() { 
    this.fill('form#contact-form', { 
     'subject': 'I am watching you', 
     'content': 'So be careful.', 
     'civility': 'Mr', 
     'name':  'Chuck Norris', 
     'email':  '[email protected]', 
     'cc':   true, 
     'attachment': '/Users/chuck/roundhousekick.doc' 
    }, true); 
}); 

casper.then(function() { 
    this.evaluateOrDie(function() { 
     return /message sent/.test(document.body.innerText); 
    }, 'sending message failed'); 
}); 

casper.run(function() { 
    this.echo('message sent').exit(); 
}); 
+1

值得一提的是,casperjs難以在節點上運行,因此您必須使用casperjs相反。 – Akshat

+0

http://stackoverflow.com/questions/13376189/login-with-casperjs –