模擬登陸改版後的知乎(最新版)
今天,想著看看視訊,把模擬登陸這一塊學習學習,以後弄把梯子,去爬爬FaceBook什麼的。就拿知乎練練手吧,可曾想,知乎竟然改版了!!之前的教程書籍對現在的知乎來說,都是扯淡,連頁面都找不到了。下面一起談談改版後的紙糊的模擬登陸吧。
頁面分析
抓包
首先,開啟頁面:https://www.zhihu.com/signup?next=%2F(登入網址都變了…),F12
,輸入賬號密碼
(記得把密碼輸錯),點選網路
,所有
,剩下的如圖所示,得到請求頭
。發現幾個請求頭和正常的不一樣(如圖所示):
1. authorization
: 應該是js生成的。
2. content-type
3.
x-udid
、x-sxrftoken
:這兩個是驗證引數,在網頁原始碼中可以找到。 接下來看一下請求引數:
然後我們結合請求頭裡
content-type:multipart/form-data; boundary=…---------------22839196617062
其中
multipart/form-data
就是一種表單提交方式;後面的 boundary=…---------------22839196617062
就是引數中的 “分割線”: 所以,直接不看那一串,引數就相當於:
client_id = c3cef7c66a1843f8b3a9e6a1e3160e20
grant_type = password
等11個引數。其中比如賬戶、密碼這些都是固定的,多次請求後,發現
client_id
、timestamp(時間戳)
也是固定的,signature
是變動的,那麼這個signature
是什麼東西呢?
確定引數位置
所以,上面假設得到證實。而且發現,後面那一串和 client_id
的值一樣。
signature
function (e, t, n) {
"use strict";
function r(e, t) {
var n = Date.now(), r = new a.a("SHA-1" , "TEXT");
return r.setHMACKey("d1b964811afb40118a12068ff74a12f4", "TEXT"), r.update(e), r.update(i.a), r.update("com.zhihu.web"), r.update(String(n)), c({
clientId: i.a,
grantType: e,
timestamp: n,
source: "com.zhihu.web",
signature: r.getHMAC("HEX")
}, t)
}
所以,signature
的值就是一些變數進行 HMAC
得到的值。
x-udid
、x-sxrftoken
直接查詢網站原始碼,搜尋全域性,定位了這兩個:
後續就是使用正則把他們匹配出來。
程式碼設計
主函式的書寫
需要匯入的python庫有:
import scrapy
from scrapy.http import Request,FormRequest
import base64
import re
import execjs
import time
from PIL import Image
import os
設定爬蟲通用的請求頭:
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/58.0',
'authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20'
}
時間戳的和獲取方法:
timestamp = int(time.time() * 1000)
客戶端 id
client_id = 'c3cef7c66a1843f8b3a9e6a1e3160e20'
定向登入原網站,這裡用到 Request()
方法
def start_requests(self):
url = 'https://www.zhihu.com/signup?next=%2F'
return [Request(url, meta={'cookiejar': 1}, callback=self.parse)]
定位驗證碼網站
def parse(self, response):
pat = re.compile('xsrf":"(.*?)&')
self.xtoken = pat.findall(response.body.decode('utf-8', 'ignore'))[0]
tempurl = 'https://www.zhihu.com/api/v3/oauth/captcha?lang=en'
yield Request(tempurl, headers=self.header, meta={"cookiejar": True}, callback=self.end)
def end(self, response):
data = response.text
if re.search('true', data):
self.i = self.i + 1
print('需要驗證碼')
yield Request('https://www.zhihu.com/api/v3/oauth/captcha?lang=cn', method='put', headers=self.header,
meta={"cookiejar": True},
callback=lambda response, ki='cn': self.parser_captcha(response, ki))
else:
print('無需驗證碼')
username = '+86手機號'
password = '你的密碼'
signature = self.add().call('run', 'password', self.timestamp)
data = {
'client_id': self.client_id, 'grant_type': 'password',
'timestamp': str(self.timestamp), 'source': 'com.zhihu.web',
'signature': signature, 'username': username,
'password': password, 'captcha': self.captcha,
'lang': 'en', 'ref_source': 'homepage', 'utm_source': ''
}
urls = 'https://www.zhihu.com/api/v3/oauth/sign_in'
yield FormRequest(urls, method='post', headers=self.header, meta={"cookiejar": response.meta["cookiejar"]},
formdata=data, callback=self.next, )
登陸所需方法:驗證碼模組。(知乎的驗證比較變態,需要post兩次。)
POST
第一次,傳送資料給驗證碼來源網站.
def parser_captcha(self, response, ki):
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/58.0',
'x - udid': 'ACBCVUdOYguPTkCvnaFKpSly5-s9HmXSCPg=',
'authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20',
'X-Xsrftoken': self.xtoken
}
print(ki)
pat = re.compile('(?s)"img_base64":"(.*?)"')
data = eval(repr(pat.findall(response.body.decode('utf-8', 'ignore'))[0]).replace('\\\\', '\\'))
k = base64.b64decode(data)
with open('D:/captcha.jpg', 'wb') as f:
f.write(k)
f.close()
try:
im = Image.open('D:/captcha.jpg')
im.show()
im.close()
except:
print(u'請到 %s 目錄找到captcha.jpg 手動輸入' % os.path.abspath('captcha.jpg'))
self.captcha = input("please input the captcha\n>")
form = {'input_text': str(self.captcha)}
yield FormRequest(response.url, headers=header, meta={'cookiejar': response.meta['cookiejar']}, formdata=form,
callback=self.finall)
POST
第二次,傳送資料給真正的登陸介面。
def finall(self, response):
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/58.0',
'x - udid': 'ACBCVUdOYguPTkCvnaFKpSly5-s9HmXSCPg=',
'authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20',
'X-Xsrftoken': self.xtoken
}
username = '+86手機號'
print('1')
password = '你的密碼'
timestamp = int(time.time() * 1000)
signature = self.add().call('run', 'password', timestamp)
print(signature)
data = {
'client_id': self.client_id, 'grant_type': 'password',
'timestamp': str(timestamp), 'source': 'com.zhihu.web',
'signature': signature, 'username': username,
'password': password, 'captcha': str(self.captcha),
'lang': 'en', 'ref_source': 'homepage', 'utm_source': ''
}
urls = 'https://www.zhihu.com/api/v3/oauth/sign_in'
print(2)
print(data)
yield FormRequest(urls, method='post', headers=header, meta={"cookiejar": response.meta["cookiejar"]},
formdata=data, callback=self.next, )
def add(self):
js1 = execjs.compile("""
貼上程式碼(由於篇幅太長,沒展示)
""")
return js1
多次執行測試,發現都沒返回圖片。
但是不排除有返回的可能性。
今天就到這吧,歡迎留言交流。
歡迎關注我的個人公眾號。
相關推薦
模擬登陸改版後的知乎(最新版)
今天,想著看看視訊,把模擬登陸這一塊學習學習,以後弄把梯子,去爬爬FaceBook什麼的。就拿知乎練練手吧,可曾想,知乎竟然改版了!!之前的教程書籍對現在的知乎來說,都是扯淡,連頁面都找不到了。下面一起談談改版後的紙糊的模擬登陸吧。 頁面分析
python爬蟲項目(新手教程)之知乎(requests方式)
ror eas 點擊 elif 原因 ffffff 文章 重點 F12 -前言 之前一直用scrapy與urllib姿勢爬取數據,最近使用requests感覺還不錯,這次希望通過對知乎數據的爬取為 各位爬蟲愛好者和初學者更好的了解爬蟲制作的準備過程以及requests請求方
嶺南師範學院VPN使用登陸校園網教程(最新版)
以下的教程比之前的教程增加手機登陸的方式 舊版教程連結:嶺南師範學院外網登陸校園網教程(例如外網登陸正方系統) https://blog.csdn.net/future_ai/article/details/80742513#commentsedit VPN使用方法 目錄
第三方登陸實踐之基於OAuth的FACEBOOK Web Login(最新版)
Facebook 登入簡介 Facebook 登入是在多個平臺供使用者建立帳戶並登入應用的便捷方式。它可用於 iOS、Android、Web、Windows Phone、桌面應用和智慧電視、物聯網物件等裝置。 Facebook 登入功能可打造以下體驗: 建
ESP32搭建3.ubuntu14.04下搭建esp32開發環境 (最新版)
終端 pat 權限 技術 實例 為我 tro component 直接 硬件為樂鑫出品的ESP32一款集成了wifi和藍牙的集成模塊。 1.首先ctrl+alt+t打開終端,sudo -s選擇用root權限登陸 。 2. 輸入指令:sudo apt-get install
Linux 平臺安裝MongoDB 4.0(最新版)
文件格式 http rip 機制 selinux 新版 要求 錯誤 平臺 概 述 MongoDB 是由C++語言編寫的,是一個基於分布式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保證服務器性能。MongoDB 旨在為WEB應用提供可擴展的高性能數據
Sketch52.3 中文漢化(最新版)
Sketch52.3 中文漢化 之前,我已經分享過一款功能強大的向量繪圖軟體——Sketch,它可以幫助你輕鬆的製作各種需要的圖形。這次帶來的是52.3版本。 Sketch是一款擁有美觀介面和強大功能的專業向量圖形繪製工具。它旨在為美術設計師創造出一款更優秀的作品,不是複製品,而是提
Sketch52.2 中文漢化(最新版)
Sketch52.2中文漢化(最新版) 之前,我已經分享過一款功能強大的向量繪圖軟體——Sketch,它可以幫助你輕鬆的製作各種需要的圖形。這次帶來的是52.2版本。 Sketch是一款擁有美觀介面和強大功能的專業向量圖形繪製工具。它旨在為美術設計師創造出一款更優秀的作品,不是複製品
principle4.3 中文漢化(最新版)
principle4.3 中文漢化(最新版) principle4.3 中文漢化(最新版) 今天,要來分享的是Mac下一款互動設計軟體——Principle,它可以幫助你製作出一個完整互動動畫的原型,非常強大。這次帶來的是Principle_4.3 中文漢化版本。
Sketch51.3 中文漢化(最新版)
之前,我已經分享過一款功能強大的向量繪圖軟體——Sketch,它可以幫助你輕鬆的製作各種需要的圖形。這次帶來的是51.3版本。 Sketch是一款擁有美觀介面和強大功能的專業向量圖形繪製工具。它旨在為美術設計師創造出一款更優秀的作品,不是複製品,而是提升品。接觸最直觀的感覺就是Sk
principle4.1 中文漢化(最新版)
- 今天,要來分享的是Mac下一款互動設計軟體——Principle,它可以幫助你製作出一個完整互動動畫的原型,非常強大。這次帶來的是Principle_4.1 中文漢化版本。 - Principle可以將互動動畫生成視訊或者Gif分享到Dribbble、Twitter 等社交平
Centos 7.x yum安裝php5.6.X(最新版)
1、檢查當前安裝的PHP包 yum list installed | grep php 如果有安裝的PHP包,先刪除他們 yum remove php.x86_64 php-cli.x86_64 2、配置yum源 CentOS 7.0的源 yum install epe
CentOS7.5 Kubernetes V1.13(最新版)二進位制部署叢集
一、概述 Kubernetes 1.13 正式GA,這是2018年釋出的第四次也是最後一次大版本,1.13也是迄今為止發行最快的版本,僅用10周時間。此版本繼續關注Kubernetes的穩定性和可擴充套件性,其中在儲存和群集生命週期領域的三個主要功能實現普遍可用(GA)。Kubeadm簡化叢集管理、容器儲存
CentOS7.5 Kubernetes V1.13(最新版)二進制部署集群
init 根據 emc install 組成 功能實現 sort 監控 自己的 一、概述 Kubernetes 1.13 正式GA,這是2018年發布的第四次也是最後一次大版本,1.13也是迄今為止發行最快的版本,僅用10周時間。此版本繼續關註Kubernetes的穩定性和
ubuntu16.04 64bit安裝交叉編譯工具arm-none-linux-gnueabi-2014.05(最新版)
安裝方式: 將下載好的安裝包拷貝到linux環境下,此處可以藉助設定虛擬機器與主機之間的共享資料夾實現。(設定方式自行百度) 實現的過程並不像網上說的那麼一帆風順,因為我的ubuntu是64bit,
[轉貼]CentOS7.5 Kubernetes V1.13(最新版)二進位制部署叢集
CentOS7.5 Kubernetes V1.13(最新版)二進位制部署叢集 http://blog.51cto.com/10880347/2326146 一、概述 kubernetes 1.13 已釋出,這是 2018 年年內第四次也
樹莓派kali linux詳細配置(最新版)
1.準備一個樹莓派,配置16g或32gtf卡 2.在kali linux官網上下載kali-linux-2018.3-rpi3-nexmon.img 3.使用win32diskimager將img檔案燒錄至tf卡,將tf卡插入樹莓派,插上dhcp顯示器,網線/無
Apache+php+mysql在windows下的安裝與配置圖解(最新版)
先準備好軟體: 一、安裝Apache,配置成功一個普通網站伺服器 出現Apache HTTP Server 2.0.55的安裝嚮導介面,點“Next”繼續 確認同意軟體安裝使用許可條例,選擇“I accept the terms in the l
android AES加密解密(最新版)
專案中要用到AES加密,百度上的AES壓根不能用,也不知道是那年的東西了,和後臺不相容,後來,後臺把他的AES程式碼拷給我 通過PHP程式碼找到了對應的Android程式碼 原文地址:http://www.funboxpower.com/php_android_ios_a
一些具非常有用原始碼分享(百度指數破解(最新版),NDIS實現類似P2P終結者功能程式碼,GOOGLE線上翻譯等等)
最近自己要去深圳,開始人生的第二份工程,所以整理以前自己寫過的小玩意程式碼(跟自己工作的程式碼無關),自己下班回家寫的程式碼,準備解除安裝簡歷裡面去求職。程式碼風格自己有注意,但還是每次看自己以前寫的程式碼就感覺是那麼醜。 1:NDIS實現類似P2P終結者的核心程式碼