平常心
昨天因為看小說不方便养渴,所以拿python擼了個小說批量下載工具贝次。為了大家方便所以打包成exe分享給大家摧茴。
可今天朋友就說了,這東西不能亂發(fā)饲梭,不論是各大盜版小說平臺,還是淘寶上賣小說的店鋪焰檩,觸及了太多人的利益憔涉,這么做很危險。
果不其然析苫,先后遇到了好幾個陌生人兜叨,關注公眾號回復關鍵字下載文件后立即取關....
只想說,你通過什么途徑掙錢是你的事情衩侥,但請不要惡心我国旷,謝謝。
今天說點什么茫死?
中午和同事閑聊跪但,說到我的大型情感劇集selenium太監(jiān)了....其實不是不想寫,主要是寫了沒人看峦萎,你愿意花時間去做無用功么屡久?
在公司的博客,也同步更新著我公眾號的文章骨杂,這兩天有一個新的關注朋友涂身,幾乎每篇博客都評論,他在最后一篇selenium的文章說搓蚪,還想看看剩余的內(nèi)容蛤售,那今天就再更一篇吧。
網(wǎng)站登錄
現(xiàn)在各大平臺在反爬蟲功能上妒潭,可謂花樣繁多悴能。總結下來按照破解成功率排名,最高的是滑動解鎖雳灾、其次是驗證碼數(shù)字漠酿、之后是一次點擊對應的漢字,最后是想12306之前那種反人類的讓你說那些是奶糖吧谎亩,哈哈......
為什么我這么排序炒嘲?很多人可能不贊同宇姚,認為驗證碼數(shù)字是最簡單的......其實不然,因為驗證碼數(shù)字現(xiàn)在不僅是背景的色塊夫凸,還穿插這很多混亂的線條浑劳,別說是系統(tǒng)識別,就是人仔細看都還會經(jīng)常出錯夭拌,所以成功率實在不高魔熏。至于滑動解鎖,網(wǎng)上教程很多...剩下的兩種就難度更高了....
那么如何能跳過這些步驟鸽扁?在訪問前添加cookie蒜绽,是最簡單粗暴的辦法!
如何獲取cookie
當我們成功登陸網(wǎng)址后桶现,網(wǎng)站會將登陸驗證信息保存在瀏覽器的Headers中躲雅,我們通過F12即可獲取,但直接從headers中看是long long 的字符串不方便審查骡和,所以切換到cookie欄吏夯,如下圖:
在cookie中不僅有登陸憑證,還會有很多其他網(wǎng)站附帶的屬性即横。此時需要我們過濾掉無關的數(shù)據(jù)噪生,僅保存我們需要的內(nèi)容即可。
你問我怎么甄別东囚?如簡書這樣的跺嗽,什么local、read_mode页藻、default_font肯定是打醬油的屬性桨嫁,沒必要關注。
但上面的__yadk_uid等等的是否需要那就只能靠實驗了.....先只加token份帐,不行再嘗試添加其他的唄璃吧。
selenium與cookie有關的方法
selenium中與cookie相關的方法有以下內(nèi)容:
- .delete_all_cookies()
- .get_cookies()/ .get_cookie()
- .add_cookie()
基本使用場景如下:
當,為了清空或者二次刷新登陸的時候废境,使用delete_all_cookies
刪除瀏覽器所有的cookie數(shù)據(jù)畜挨。
當當,為了獲取系統(tǒng)某個或者所有cookie信息是使用get_cookies()/ .get_cookie(<name>)噩凹。
當當當巴元,我們需要為瀏覽器添加cookie時,使用add_cookie驮宴。這種場景最多....
說的再多逮刨,不如來點實際的,設計一套思路來實現(xiàn)這三種方法:
- 首先堵泽,我們訪問簡書
- 然后點擊登陸修己,輸入用戶名密碼
- 等待十秒用來手動完成驗證方式
- 獲取get_cookie(key) 和get_cookies()
- 退出chromedriver
- 重新訪問簡書恢总,并添加cookie
- 再次訪問url,看到已經(jīng)完成了登陸....
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清風Python
# @Date : 2019/7/2 0:55
# @Software : PyCharm
# @version :Python 3.7.3
# @File : selenium_cookie.py
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.reibang.com/u/d23fd5012bed")
driver.delete_all_cookies()
driver.find_element_by_id('sign_in').click()
driver.find_element_by_id('session_email_or_mobile_number').send_keys('username')
driver.find_element_by_id('session_password').send_keys('password')
driver.find_element_by_id('sign-in-form-submit-btn').click()
# 此時我們手動進行登錄驗證操作操作
time.sleep(10)
# cookie 關鍵字
key = 'remember_user_token'
user_token = driver.get_cookie(key)
print(user_token)
cookies = driver.get_cookies()
print(cookies)
driver.quit()
cookie = {'name': key, 'value': user_token['value']}
driver = webdriver.Chrome()
driver.get("http://www.reibang.com/u/d23fd5012bed")
driver.add_cookie(cookie)
driver.get("http://www.reibang.com/u/d23fd5012bed")
time.sleep(3)
driver.close()
看看實現(xiàn)效果睬愤,為了不暴露用戶名密碼离熏,所以代碼中清空了用戶名,暫停手動輸入的戴涝。
看到終端打印了cookie和cookies,cookie為字典钻蔑,cookies為包裹了多個字典的列表啥刻。之后我們使用cookie進行二次登陸時,通過刷新兩次界面看到右上角用戶名由未登錄變?yōu)榱说顷懀?/p>
To Be Continue咪笑?
今天的selenium內(nèi)容就更新到這里可帽,為什么是問號,因為篤定了明天這篇文章瀏覽量又是幾十....不寫吧這個系列成了太_監(jiān)文窗怒,寫吧完全是給個別人更新的映跟,哎......
OK,如果覺得這篇文章對你有幫助扬虚,歡迎將文章或我的微信公眾號【清風Python】
轉(zhuǎn)發(fā)分享給更多喜歡python的朋友們努隙,謝謝。