PhantomJS實現最簡單的模擬登入方案

2022-03-02 22:54:11 字數 1781 閱讀 3339

以前寫爬蟲,遇到需要登入的頁面,一般都是通過chrome的檢查元素,檢視登入需要的引數和加密方法,如果**的加密非常複雜,例如登入qq的,就會很蛋疼

在後面,有了pyv8,就可以把加密的js檔案扔給它,然後返回加密後的字串。但是pyv8只能安裝在centos7的版本,而且耗用記憶體也比較大。

現在有了phantomjs,再也不需要考慮登入的引數和加密了,用phantomjs開啟頁面,通過js或jquery語句,填入賬號和密碼,然後點選登入,然後把cookies儲存下來,就可以模擬登入了。

# yum -y install gcc gcc-c++ make flex bison gperf ruby \

openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \

libpng-devel libjpeg-devel

# git clone git:

# cd phantomjs

# git checkout 2.0

# ./build.sh

var page = require('webpage').create();
page.open('', function() );
第二個引數是開啟頁面後**的函式

page.evaluate(function() );
包裹在evaluate裡面的js語句是在沙箱裡面執行的,沙箱的上下文環境就是open的頁面的環境,所以在這裡可以通過js語句訪問頁面的元素,例如$("body").html()

由於在沙箱中執行,所以console.info不會輸出的終端,如果需要輸出到終端,就要設定**函式:

page.onconsolemessage = function(msg) ;
獲取頁面的cookies

console.info(json.stringify(page.cookies))
cookies的資料結構,相當於

[

]

page.viewportsize = ;//設定頁面的尺寸

page.render('info_test.png');

如果截圖後,中文字元顯示為方框,安裝字型庫

yum install bitmap-fonts bitmap-fonts-cjk
var page = require('webpage').create(),

system = require('system'),

address, output, size;

if (system.args.length != 5) else

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

page.viewportsize = ;

var url=''

page.open(url, function() );

settimeout('print_cookies()',10000)

});function print_cookies()

phantomjs test.js
參考

phantomjs官網

最簡單的IdentityServer實現 Api

建立asp.net core web api專案identityserver.easydemo.api 2引用identityserver4.accesstokenvalidation 3新增介面檔案identitycontroller.cs,用於測試授權 如果你直接訪問http localhost...

tensoflow實現最簡單的分類

import numpy as np import tensorflow as tf import random import pickle from collections import counter import nltk from nltk.tokenize import word toke...

js實現最簡單的拖拽

關於js實現最簡單的拖拽 說到拖拽功能,現在各大,中,小型 都基本上有類似的東西,特別是對彈出層拖拽,更是常見的一塌糊塗。其實對於彈出層而言,拖拽最初的目的很單純,就是為了通過拉開層,使被彈出層擋住的內容可見,當然,後來關於拖拽的功能不斷被優化,使得拖拽的應用有了別的意義,最典型的如igoogle的...