中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python和JS反爬怎么解決反爬參數signKey

發布時間:2022-05-18 09:28:08 來源:億速云 閱讀:415 作者:zzz 欄目:開發技術

本篇內容主要講解“Python和JS反爬怎么解決反爬參數signKey”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python和JS反爬怎么解決反爬參數signKey”吧!

實戰場景

Python 反爬中有一大類,叫做字體反爬,核心的理論就是通過字體文件或者 CSS 偏移,實現加密邏輯

本次要采集的站點是:54yr55y855S15b2x(Base64 加密) 站點地址為:https%3A%2F%2Fmaoyan.com%2Ffilms%2F522013(URL 編碼)

上述地址打開之后,用開發者工具選中某文字之后,會發現 Elements 中,無法從源碼讀取到數據,

如下圖所示:

Python和JS反爬怎么解決反爬參數signKey

類似的所有場景都屬于字體編碼系列,簡單理解就是:

服務器源碼,無法直接讀取文字。

也可以用請求頁面預覽選項卡,判斷是否為字體加密,當出現如下結論時,可以判斷,其中數字信息,顯示為方框。

Python和JS反爬怎么解決反爬參數signKey

系統分析

本以為直接進入字體加密解密邏輯,本案例就可以解決,但是當打開請求頭之后,發現出現了一個請求參數 signKey,而且還加密了,那解決字體反爬前,先解決這個加密問題吧。

Python和JS反爬怎么解決反爬參數signKey

打開控制臺,直接檢索 signKey 參數,發現只有一個文件所有涉及。

Python和JS反爬怎么解決反爬參數signKey

打開 common.js 文件之后,進行格式化,繼續檢索關鍵字。

Python和JS反爬怎么解決反爬參數signKey

直接將斷點打在 688 行附近,然后刷新頁面,等待斷點請求。

Python和JS反爬怎么解決反爬參數signKey

當發現關鍵字 _0x371d 時,就知道,這里需要一點點扣 JS 代碼了,又是一個細致活。

待提取的 JS 代碼如下所示:

u = function(x) {
var d = x[a(_0x371d("0x14c"))]
 , e = x[a(_0x371d("0x14d"))]
 , _ = x[a(_0x371d("0x14e"))]
 , t = void 0 === _ ? 1 : _
 , n = Math[a("0x82")](10 * Math[a(_0x371d("0x14f"))]())
 , i = (new Date)[a(_0x371d("0x150"))]()
 , o = typeof window !== a("0x4") && window[_0x371d("0x151")]
 , s = o[a(_0x371d("0x152"))]
 , u = a(_0x371d("0x153")) + d.toUpperCase() + a("0x87") + i + a(_0x371d("0x154")) + s + _0x371d("0x155") + n + a("0x89") + e + a(_0x371d("0x156")) + t
 , f = a(_0x371d("0x157"));
return {
   timeStamp: i,
   index: n,
   signKey: (0,
   r[a(_0x371d("0x158"))])(u + f),
   channelId: e,
   sVersion: t,
   webdriver: c()
}

每次頁面刷新的時候,都可以捕獲一下相關參數與值。

Python和JS反爬怎么解決反爬參數signKey

例如,這里可以直接得到 d = "GET",寫入到我們的 JS 文件即可。

第一步加密之后,得到各個參數值,其中 u 與 f 比較重要。 通過每次斷點,可以依次將代碼逐步還原。 下述是一些比較重要的步驟,如果路徑不清楚,可以點擊下面卡片,直接詢問橡皮擦。

獲取 f 值

Python和JS反爬怎么解決反爬參數signKey

獲取 _0x5827 函數內容

Python和JS反爬怎么解決反爬參數signKey

下述內容 r 是一個數組,可以通過索引獲取其中的字符串

Python和JS反爬怎么解決反爬參數signKey

a(_0x371d("0x158"));
("default");

隨著代碼的深入,發現了最核心 signKey 參數的加密位置,截圖如下:

Python和JS反爬怎么解決反爬參數signKey

這就是一個大工程了,沒有 1 個小時,無法翻譯完畢。

我們先將核心的函數扣出來,然后一點點進行替換,核心未翻譯代碼如下所示:

function() {
var d = e(7)
 這里面好多代碼
        , v = u
        , M = f;
        s = m(s, c, u, f, i[l + 0], 7, -680876936),
        f = m(f, s, c, u, i[l + 1], 12, -389564586),
        u = m(u, f, s, c, i[l + 2], 17, 606105819),
        c = m(c, u, f, s, i[l + 3], 22, -1044525330),
 這里面好多代碼
}()

翻譯的時候,關注幾個重點參數即可。 ** _0x371d **

var _0x371d = function (x, d) {
  return (x -= 0), _0x5827[x];
};

** _0x5827 **

var _0x5827 = ["parseJSON", "parseXML", "ajaxSettings", "ajaxSetup", "statusCode", "canceled", "success", "dataType", …………;

復制到編輯器中,直接好家伙,超過 7W 字了。

Python和JS反爬怎么解決反爬參數signKey

加密變量 a

var a = function (x, d) {
  return (x -= 0), r[x];
};

加密變量 r

Python和JS反爬怎么解決反爬參數signKey

加密參數 d

Python和JS反爬怎么解決反爬參數signKey

了解上述幾個值的取值方式,解決 signKey 就變得非常簡單了。

除此之外,最簡單的辦法是直接將 common.js 文件搭建在本地,然后用 Python 去調用,直接就可以獲取到對應的數據。

JS 代碼在 Python 中執行,使用如下 Demo 即可實現:

import execjs
# 執行 JS 文件
js = "js 腳本內容"
ctx = execjs.compile(js)
x = {
    'method': 'GET',
    'channelId': 40011,
    'sVersion': 1,
    'type': 'object'
}
# 傳入參數
n = ctx.call('翻譯之后的加密函數名', x)

到此,相信大家對“Python和JS反爬怎么解決反爬參數signKey”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蚌埠市| 嘉善县| 新巴尔虎左旗| 孝感市| 宜阳县| 塘沽区| 饶河县| 宜川县| 梧州市| 阿克苏市| 揭阳市| 乌海市| 焉耆| 越西县| 阜平县| 井冈山市| 清涧县| 襄汾县| 襄城县| 仁怀市| 喜德县| 江永县| 临沂市| 永泰县| 普兰店市| 塘沽区| 东兴市| 宿州市| 宜兴市| 廊坊市| 姚安县| 虞城县| 井陉县| 麻城市| 贵南县| 茌平县| 昂仁县| 张家港市| 宁强县| 沧州市| 民县|