房天下 登錄 本次爬取的網址為: 一、分析請求 輸入用戶名和密碼,點擊登錄按鈕 請求的參數為: 就是輸入的用戶名, 是將密碼加密後的數據。我們只要找出密碼的加密方式就可以模擬登錄了。 二、密碼加密方式破解 這次我們以 作為關鍵字,進行搜索 找到加密位置之後,我們打上斷點,重新點擊登錄 找到密碼加密的 ...
房天下-登錄
本次爬取的網址為:https://passport.fang.com
一、分析請求
輸入用戶名和密碼,點擊登錄按鈕
請求的參數為:
uid: 123456789
pwd: 64ccd4212d87e6cc149d0545ad1d46263ef70eb7cd66543419dc639ff4842c4a8cd1f84a519933040ba2c2aa9045934d4c33c72c006fe98ef51a3bd643aa40cb28a2fce9c5b40c49881db90c0bf372188a98747308071a995d19caf3ef63ab402ff81865159717b495b2f393b079fda964c8872297b7360f5c58e951e59f42d1
Service: soufun-passport-web
AutoLogin: 1
uid
就是輸入的用戶名,pwd
是將密碼加密後的數據。我們只要找出密碼的加密方式就可以模擬登錄了。
二、密碼加密方式破解
這次我們以pwd
作為關鍵字,進行搜索
找到加密位置之後,我們打上斷點,重新點擊登錄
找到密碼加密的函數,查看內容
這裡呢使用execjs
這個庫去解決,實現起來非常簡單。我們將js文件內容全部複製一份到我們本地的js文件。
至於execjs
怎麼使用,你可以看我寫的一篇博客,非常簡單。前提你的安裝execjs
和node
環境。最後我們通過execjs調用函數getPassword
就可以拿到加密的字元串了。
import execjs
import requests
class FangTX:
def __init__(self):
self.session = requests.Session()
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
"Origin": "https://passport.fang.com",
"Referer": "https://passport.fang.com/"
}
def login(self, username, password, auto_login=1):
'''
:param username: 賬戶名
:param password: 密碼
:param auto_login: 是否自動登錄 0為否 1為是
:return:
'''
api = "https://passport.fang.com/login.api"
password = self._get_encrypt_password(password)
headers = self.headers.copy()
data = {
"uid": username,
"pwd": password,
"Service": "soufun-passport-web",
"AutoLogin": auto_login
}
result = self.session.post(url=api, data=data, headers=headers).json()
print(result)
def _get_encrypt_password(self, password):
if not hasattr(self, "ctx"):
self._get_ctx()
return self.ctx.call("getPassword", password)
def _get_ctx(self):
# ./a.js就是複製下來的js文件
js_code = ""
with open("./a.js", "r", encoding="utf-8") as f:
for line in f:
js_code += line
self.ctx = execjs.compile(js_code)
def test(self):
# self.login("18716758177", "123456")
pass
if __name__ == '__main__':
ftx = FangTX()
ftx.test()