Python和JS反爬之解決反爬參數(shù)?signKey
實(shí)戰(zhàn)場景
Python 反爬中有一大類,叫做字體反爬,核心的理論就是通過字體文件或者 CSS 偏移,實(shí)現(xiàn)加密邏輯
本次要采集的站點(diǎn)是:54yr55y855S15b2x(Base64 加密) 站點(diǎn)地址為:https%3A%2F%2Fmaoyan.com%2Ffilms%2F522013(URL 編碼)
上述地址打開之后,用開發(fā)者工具選中某文字之后,會發(fā)現(xiàn) Elements 中,無法從源碼讀取到數(shù)據(jù),
如下圖所示:

類似的所有場景都屬于字體編碼系列,簡單理解就是:
服務(wù)器源碼,無法直接讀取文字。
也可以用請求頁面預(yù)覽選項(xiàng)卡,判斷是否為字體加密,當(dāng)出現(xiàn)如下結(jié)論時,可以判斷,其中數(shù)字信息,顯示為方框。

系統(tǒng)分析
本以為直接進(jìn)入字體加密解密邏輯,本案例就可以解決,但是當(dāng)打開請求頭之后,發(fā)現(xiàn)出現(xiàn)了一個請求參數(shù) signKey,而且還加密了,那解決字體反爬前,先解決這個加密問題吧。

打開控制臺,直接檢索 signKey 參數(shù),發(fā)現(xiàn)只有一個文件所有涉及。

打開 common.js 文件之后,進(jìn)行格式化,繼續(xù)檢索關(guān)鍵字。

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

當(dāng)發(fā)現(xiàn)關(guān)鍵字 _0x371d 時,就知道,這里需要一點(diǎn)點(diǎn)扣 JS 代碼了,又是一個細(xì)致活。
待提取的 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()
}每次頁面刷新的時候,都可以捕獲一下相關(guān)參數(shù)與值。

例如,這里可以直接得到 d = "GET",寫入到我們的 JS 文件即可。
第一步加密之后,得到各個參數(shù)值,其中 u 與 f 比較重要。 通過每次斷點(diǎn),可以依次將代碼逐步還原。 下述是一些比較重要的步驟,如果路徑不清楚,可以點(diǎn)擊下面卡片,直接詢問橡皮擦。
獲取 f 值

獲取 _0x5827 函數(shù)內(nèi)容

下述內(nèi)容 r 是一個數(shù)組,可以通過索引獲取其中的字符串

a(_0x371d("0x158"));
("default");隨著代碼的深入,發(fā)現(xiàn)了最核心 signKey 參數(shù)的加密位置,截圖如下:

這就是一個大工程了,沒有 1 個小時,無法翻譯完畢。
我們先將核心的函數(shù)扣出來,然后一點(diǎn)點(diǎn)進(jìn)行替換,核心未翻譯代碼如下所示:
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),
這里面好多代碼
}()翻譯的時候,關(guān)注幾個重點(diǎn)參數(shù)即可。 ** _0x371d **
var _0x371d = function (x, d) {
return (x -= 0), _0x5827[x];
};** _0x5827 **
var _0x5827 = ["parseJSON", "parseXML", "ajaxSettings", "ajaxSetup", "statusCode", "canceled", "success", "dataType", …………;
復(fù)制到編輯器中,直接好家伙,超過 7W 字了。

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

加密參數(shù) d

了解上述幾個值的取值方式,解決 signKey 就變得非常簡單了。
除此之外,最簡單的辦法是直接將 common.js 文件搭建在本地,然后用 Python 去調(diào)用,直接就可以獲取到對應(yīng)的數(shù)據(jù)。
JS 代碼在 Python 中執(zhí)行,使用如下 Demo 即可實(shí)現(xiàn):
import execjs
# 執(zhí)行 JS 文件
js = "js 腳本內(nèi)容"
ctx = execjs.compile(js)
x = {
'method': 'GET',
'channelId': 40011,
'sVersion': 1,
'type': 'object'
}
# 傳入?yún)?shù)
n = ctx.call('翻譯之后的加密函數(shù)名', x)到此這篇關(guān)于Python和JS反爬之解決反爬參數(shù) signKey的文章就介紹到這了,更多相關(guān)反爬參數(shù) signKey內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python wxpython模塊響應(yīng)鼠標(biāo)拖動事件操作示例
這篇文章主要介紹了Python wxpython模塊響應(yīng)鼠標(biāo)拖動事件操作,結(jié)合實(shí)例形式分析了Python使用wxpython模塊創(chuàng)建窗口、綁定事件及相應(yīng)鼠標(biāo)事件相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
Python selenium根據(jù)class定位頁面元素的方法
這篇文章主要介紹了Python selenium根據(jù)class定位頁面元素的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
pandas創(chuàng)建新Dataframe并添加多行的實(shí)例
下面小編就為大家分享一篇pandas創(chuàng)建新Dataframe并添加多行的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
python中os.path.dirname(path)詳細(xì)解釋和使用示例
這篇文章主要介紹了python中os.path.dirname(path)詳細(xì)解釋和使用示例,os.path.dirname是一個Python函數(shù),用于獲取文件路徑的目錄部分,它通常與os.path.basename結(jié)合使用,以分離路徑中的目錄和文件名,需要的朋友可以參考下2025-03-03
python 實(shí)現(xiàn)分頁顯示從es中獲取的數(shù)據(jù)方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)分頁顯示從es中獲取的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
解決Python調(diào)用df.to_csv()出現(xiàn)中文亂碼的問題
在Python使用df.to_csv()時,若出現(xiàn)中文亂碼,可通過加入?yún)?shù)encoding="utf_8_sig"解決,"utf-8"編碼不包含BOM,直接處理文件時會將BOM誤讀為內(nèi)容;而"utf_8_sig"會識別并處理BOM,避免亂碼,此方法為實(shí)踐經(jīng)驗(yàn),供參考2024-09-09
python os.path.isfile()因參數(shù)問題判斷錯誤的解決
今天小編就為大家分享一篇python os.path.isfile()因參數(shù)問題判斷錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11

