利用phantomjs模擬登錄網站(帳號登陸)

今天工作感覺有點困,所以就沒心情工作,然後就順便過來寫一篇關於phantomjs的簡單的登錄功能的博客,自己也研究了一段時間了,由於網上的官方可能想要把研究的成本賺回來,所以公佈的文檔也是很簡單的,並沒有對某些功能進行詳細的介紹,所以自己研究的時候也是一點一點摸索的,下面就是本人的研究成果,希望寫出來能幫助到大多數人。

首先我們就以CSDN博客的登錄爲例,這裏的登陸賬號和密碼,讀者可以使用自己的,只要將登錄帳號和密碼修改一下就可以登錄並抓取網頁數據下來了,首先我們利用eclipse創建一個java工程,主要是用來調用phantomjs,java工程目錄如下截圖:

接着以下就是我們在Test.java中的代碼:

package com.xzz.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();//Runtime.getRuntime()可以取得當前JVM的運行時環境,這也是在Java中唯一一個得到運行時環境的方法
Process process = null;  
   String url = "https://passport.csdn.net/account/login?from=http://www.csdn.net";//要訪問的網址
   try {  
    process = rt.exec("C:/Users/Administrator/Desktop/phantomjs-2.5.0-beta2-windows/phantomjs-2.5.0-beta2-windows/bin/phantomjs.exe " +"C:/Users/Administrator/Desktop/codesss.js "+url);//將命令行的數據輸入到運行環境中並執行,其中的路徑最好寫成絕對路徑,

       InputStream in = process.getInputStream();  //這一部分就是通過java流的方式來獲取到抓取下來的網頁信息,
       InputStreamReader reader = new InputStreamReader(in, "UTF-8");  
       BufferedReader br = new BufferedReader(reader);
       StringBuffer sbf = new StringBuffer();  
       String tmp = "";  
       while((tmp = br.readLine())!=null){      
        sbf.append(tmp);      
        }  
       System.out.println(sbf.toString());
       } catch (IOException e) {  
        e.printStackTrace();  
        }  
   }
}

以上部分只是登陸網頁的準備工作,接着我們要利用js來操作phtomjs這個無頭瀏覽器,

首先我們進入到qq空間的登錄網頁頁面,然後右鍵打開網頁源代碼,如下截圖,然後找到username和password輸入框:




然後開始編寫登陸的js文件。如下代碼所示:

system = require('system');//這裏是獲取java文件裏的送到虛擬機中的命令行數據
var address = system.args[1];//從這裏我們可以得到csdn登錄頁的url
var page = require('webpage').create();//創建一個page,可查看相關的文檔瞭解
page.open(address,function(status){
if(status === 'success'){
var cookiesStr="";
        var cookies=page.cookies;
        for(var i in cookies){
            cookiesStr=cookiesStr+cookies[i].name+"="+cookies[i].value+";";         
        }
        console.log(cookiesStr);
page.evaluate(function() {
            $("#username")[0].value='***************';//這裏填寫帳號
            $("#password")[0].value='*******';//這裏填寫密碼
            $(".logging").click();//登錄按鈕的動作
        });
console.log("........................");
var cookiesStra = "";
var cookiesc = page.cookies;
for(var j in cookiesc){
            cookiesStra=cookiesStra+cookiesc[j].name+"="+cookiesc[j].value+";";
        }
console.log(cookiesStra);
setTimeout('print_cookies()',10000);
}else{
console.log("error.....");
phantom.exit();
}
});

//當登陸成功後,跳轉到想要取得頁面,並把網頁的數據抓下來
function print_cookies(){
    console.info(JSON.stringify(page.cookies, undefined, 4));
var page1 = require('webpage').create();
//phantom.addcookie
page1.open("http://blog.csdn.net/xiezuozhen",function(status){
if(status === 'success'){
console.log(page1.content);
var cookiesStrb="";
        var cookiesb=page1.cookies;
        for(var k in cookiesb){
            cookiesStrb=cookiesStrb+cookiesb[k].name+"="+cookiesb[k].value+";";         
        }
console.log(cookiesStrb);
page1.evaluate(function(){






});
phantom.exit()
}else{
console.log("error.....");
phantom.exit();
}
});
}

到此phantomjs模擬登錄網頁的操作基本完成,並且還可以抓取登陸後的網頁的數據。如果需要對網頁數據進行進一步的篩選操作,獲取自己想要的信息,可以看以後更新的博客或者加本人qq:1925036827,可一起討論相關的問題。相關的資源可以到QQ羣:623962264中下載.

以下是抓取下來的網頁的數據截圖:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章