python爬蟲-房天下-登錄


房天下-登錄

本次爬取的網址為:https://passport.fang.com

一、分析請求

輸入用戶名和密碼,點擊登錄按鈕

請求的參數為:

uid: 123456789
pwd: 64ccd4212d87e6cc149d0545ad1d46263ef70eb7cd66543419dc639ff4842c4a8cd1f84a519933040ba2c2aa9045934d4c33c72c006fe98ef51a3bd643aa40cb28a2fce9c5b40c49881db90c0bf372188a98747308071a995d19caf3ef63ab402ff81865159717b495b2f393b079fda964c8872297b7360f5c58e951e59f42d1
Service: soufun-passport-web
AutoLogin: 1

uid就是輸入的用戶名,pwd是將密碼加密后的數據。我們只要找出密碼的加密方式就可以模擬登錄了。

二、密碼加密方式破解

這次我們以pwd作為關鍵字,進行搜索

找到加密位置之后,我們打上斷點,重新點擊登錄


找到密碼加密的函數,查看內容

這里呢使用execjs這個庫去解決,實現起來非常簡單。我們將js文件內容全部復制一份到我們本地的js文件。

至於execjs怎么使用,你可以看我寫的一篇博客,非常簡單。前提你的安裝execjsnode環境。最后我們通過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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM