在用selenium爬取網頁的時候,有時候需要登陸,這時候用selenium獲取cookie和攜帶cookie是很方便的,獲取cookie可以通過內置的函數get_cookies(),它得到的是一組cookie,是由cookie組成的列表。單個的cookie是字典組成的,所有get_cookies()返回值是由字典組成的列表。
1
2
3
4
5
|
dictCookies = browser.get_cookies()
jsonCookies = json.dumps(dictCookies)
# print(jsonCookies)
with open(
'anquan.txt'
,
'w'
)
as
f:
f.write(jsonCookies)
|
注意:這個jsonCookies是一個列表,是一個完整的cookie。
1
2
3
4
|
{
'name'
:
'QCARJSESSIONID'
,
'value'
:
'BBmPcsfClCknfQX1cN2MLMgKXZGtFWqsBvjN9mbM9tmbL38hMmw4!1426878101'
,
'path'
:
'/'
,
'domain'
:
'qcar.apiins.com'
,
'secure'
: False,
'httpOnly'
: True}
{
'name'
:
'BIGipServercar_qcar_poool'
,
'value'
:
'1191316140.16671.0000'
,
'path'
:
'/'
,
'domain'
:
'qcar.apiins.com'
,
'secure'
: False,
'httpOnly'
: False}
{
'name'
:
'chinainsuranceJSESSIONID'
,
'value'
:
'rkgncsfG8pnrhh8x1CvNy46zHplyLkTjyv1LL2hk4wDrkD9Mjz9Y!2078734058'
,
'path'
:
'/'
,
'domain'
:
'qcar.apiins.com'
,
'secure'
: False,
'httpOnly'
: True}
{
'name'
:
'BIGipServercar_core_pool'
,
'value'
:
'1191316140.17951.0000'
,
'path'
:
'/'
,
'domain'
:
'qcar.apiins.com'
,
'secure'
: False,
'httpOnly'
: False}
|
這樣就獲取到了cookie,那么如何使用呢,我們讓瀏覽器對象攜帶cookies就行了,這時候用另外一個函數add_cookie()
1
2
3
4
5
6
7
8
|
with
open
(
'anquan.txt'
,
'r'
, encoding
=
'utf8'
) as f:
listCookies
=
json.loads(f.read())
print
(
'%%%%%%%%%%%%%%%%%'
, listCookies)
for
cookie
in
listCookies:
obj.add_cookie(cookie)
obj.get(
'https://qcar.apiins.com/qcar'
)
# 讀取完cookie刷新頁面
obj.refresh()
|
這樣,我們就可以攜帶cookie,實現免登陸。有人說,你直接登陸不就完事了嗎?有些應用場景還是用的到的,比如說驗證碼識別率不高,比如監視爬蟲,定時爬蟲,要求五分鍾爬一次,兩分鍾爬一次,每次登陸會很麻煩。這個時候我們可以分開,一個專門登陸抓取cookie,30分鍾更新一次cookie文件。另外一個讀取cookie文件就ok了。