結語做過爬蟲或者機械人的朋友一定會遇到登陸的問題:大多數的**需要登陸之後才能讀取內容或者執行操作。要實現**的自動化登陸和操作,大概的方法有兩種:1,通過chrome無頭瀏覽器-selenium等工具模擬登陸,然後通過控制selenium實現和**的互動操作;2,將包含已登陸資訊的cookie設定到http請求當中,直接通過http request進行互動;這兩種方法各自適用不同的場景,互相不能替代。但總的來說,當已經摸清伺服器http api的時,第二種方法是最直接有效,**也是最簡潔的。
對於第一種方法來說,最麻煩的是處理現在越來越繁複的驗證碼校驗。雖然google和baidu 都有發布過一些包可以識別中的驗證碼,但準確率並不高;並且遇到需要手動拖拽的防機械人校驗還得加入複雜的js**進行動作模擬;
對於第二種方法,關鍵是如何獲取cookie並妥善的處理cookie中登陸token過時的問題。我這篇文章提供乙個簡單的解決思路,雖然沒有完全的自動化,但是只是部分解決了獲取cookie和將cookie同步到機械人端的問題
首先,我們需要在平時我們訪問**的時候,能夠自動的將cookie儲存下來,並且傳送到雲資料庫中,方便機械人獲取該cookie。
其次,在每次機械人執行對應的工作時,都到雲資料庫中獲取對應**最新的cookie,再執行自動化操作。
這樣做的好處在於:
我們不需要寫複雜的**去模擬登陸
每次我們訪問常用**的時候都會將最新的cookie更新到資料庫,避免機械人使用的cookie過時
比如,我訪問csdn,可以從下圖看到,chrome已經自動匯出了我的cookie,並且同步到了我的aws dynamodb當中。
要讓chrome能實現這樣的行為,我們需要自己開發chrome外掛程式,所幸的是,**量並不大。
使用外掛程式主要基於以下原因:
對於大部分的使用者登陸資訊(user token等)來說,在儲存到cookie中時,都帶了http_only的flag,這個flag作為乙個安全機制,目前基本已經成為乙個業內標準。即當cookie中的值被標記為http_only時,在js指令碼中無法通過document.cookie
獲取。即,如果你希望在js中獲取當前頁面的cookie時,document.cookie
只能獲取部分內容(非http_only)。而chrome plugin因為有更高的操作許可權,可以通過chrome.cookies
介面獲取所有的cookie
因為我們期望的操作是獲取使用者登陸資訊並同步到遠端,資料安全尤為重要,以外掛程式的方式進行操作,可以有效的隔離危險,防止被窺探
我這裡只提一下重點,貼一下**,關於具體的教程可以自行在網上搜尋。這裡給出google chrome的開發者官網。對介面有不清楚的可以到這上面去看一下。
cookiesharehelper lex$ tree
.├── images
│ ├── star_128px.ico
│ ├── star_132.png
│ ├── star_16.png
│ ├── star_16px.ico
│ ├── star_24.png
│ ├── star_24px.ico
│ ├── star_32px.ico
│ ├── star_33.png
│ ├── star_48px.ico
│ ├── star_49.png
│ ├── star_64px.ico
│ ├── star_66..png
│ ├── star_72px.ico
│ ├── star_74.png
│ ├── star_96px.ico
│ └── star_99.png
├── js
│ ├── aws-sdk.min.js
│ ├── background.js
│ └── content.js
└── manifest.json
主要的只有三個檔案:
類似node開發裡的package.json
,裡面定義了chrome外掛程式的資訊和結構。
,"browser_action":,
"default_title"
:"cookie分享工具"},
]}
還是對應到node的開發:
這裡的background
, 相當於後端
"background"
:
content_scripts
, 相當於前端。
"content_scripts":[
]
這裡需要注意的是,cookies不是預設的chrome元件,必須手動新增
"permissions":[
"cookies"
,//這行必不可少
]
這部分的**超簡單:主要是觸發後端去進行cookie的更新,這裡需要注意的是,content和background是執行在兩個環境當中,它們需要通過onmessage通訊機制進行通訊
window.
addeventlistener
("load"
, mymain,
false);
function
getcookies
(url)
,async
function
(response));
}function
mymain
(evt)
aws
.config.
update()
;var docclient =
newaws.dynamodb.documentclient()
;var table =
"dynamodb的table名"
;var id =
"csdn"
;function
updatecookie
(currentcookie)};
docclient.
get(params,
function
(err, data)
else}}
);}function
putitem
(cookie)};
docclient.
put(params,
function
(err, data)
else})
;}chrome.runtime.onmessage.
addlistener
((request, sender, sendresponse)
=>
,(cks)
=>).
join
(";")+
";";
updatecookie
(cookie);}
);sendresponse
("cookie update are trigger");});
修改Chrome外掛程式,Chrome外掛程式位置
這裡首先感謝微博急簡的作者 還我乙個乾淨的微博環境。應該是滿足大家,預設的吧個人的背景替換成灰色的了,我的背景是大美女,想看看,於是就有了今天的博文。那麼,我就要修改chrome的外掛程式,我以前只會用,那裡會修改,於是就找,ubuntu下,chrome的安裝位置在 opt google chrom...
Chrome 外掛程式集錦
原文出處 cn simo 子曾曰 工欲善其事,必先利其器。居是邦也。語出 論語 衛靈公 其後一百多年,荀子也在其 勸學 中倡言道 吾嘗終日而思矣,不如須臾之所學也 吾嘗跂而望矣,不如登高之博見也。登高而招,臂非加長也,而見者遠 順風而呼,聲非加疾也,而聞者彰。假輿馬者,非利足也,而致千里 假舟楫者,...
Chrome 外掛程式集錦
原文出處 cn simo 子曾曰 工欲善其事,必先利其器。居是邦也。語出 論語 衛靈公 其後一百多年,荀子也在其 勸學 中倡言道 吾嘗終日而思矣,不如須臾之所學也 吾嘗跂而望矣,不如登高之博見也。登高而招,臂非加長也,而見者遠 順風而呼,聲非加疾也,而聞者彰。假輿馬者,非利足也,而致千里 假舟楫者,...