日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

监听js变量的变化_JS监听事件型爬虫

發布時間:2023/12/3 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监听js变量的变化_JS监听事件型爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“Python數據科學”,選擇“星標公眾號”

關鍵時刻,第一時間送達!

作者:zuobangbang

來源:zuobangbang

最近開始研究網頁參數的JS加密,但是大型網站的JS文件過于繁雜,不適合新手上路,于是乎找了幾個簡單的網頁來學習學習。

首先要和大家聊的是監聽事件型爬蟲(推薦FireFox瀏覽器)。簡單介紹一下JS事件監聽:

JavaScript之事件概念和監聽事件

1、事件的概念:

JavaScript使我們有能力創建動態頁面,網頁中的每一個元素都可以產生某些觸發JavaScript函數的事件。我們可以認為事件是可以被JavaScript偵測到的一種行為。

2、事件流:

事件流主要分為冒泡型事件和捕獲型事件。IE瀏覽器目前只支持冒泡型事件,而支持標準DOM的瀏覽器比如火狐、Chrome等兩者都支持。

?3、使用返回值改變HTML元素的默認行為:

  HTML元素大都包含了自己的默認行為,例如:超鏈接、提交按鈕等。我們可以通過在綁定事件中加上"return false"來阻止它的默認行為。

4、通用性的事件監聽方法:

(1)綁定HTML元素屬性:

(2)綁定DOM對象屬性:document.getElementById("xxx").οnclick=test;

(https://www.cnblogs.com/dorra/p/7349747.html)

目標網站:http://ac.scmor.com/

第一次寫js類的爬蟲,斷點調試過程寫詳細些。

鼠標點擊現在訪問時,會前往另一個網頁。用火狐瀏覽器打開,元素定位到“現在訪問”,可以看到下圖:網頁鏈接沒有出現在源代碼中,相反在標簽末尾有一個event;這代表當點擊“現在訪問”這個事件發生時,會被監聽并做出相應的反應。

點擊“event”,可以看到一個函數onclick(event),在這個函數里,還有一個visit()函數;這表示當點擊“現在訪問”發生時,會引發onclick(event)的發生,從而引發visit()函數。

全局搜索(ctrl+shift+f)搜索visit()可以看到下圖有一個function visit(url);這就是我們要找的函數啦。(這一步開始使用谷歌瀏覽器)

來分析一下這個函數:它的變量是url,也就是上圖中visit('QSQ7XggEHBUhXDxYLwIFHwh4ZRkwXFI0Pw4jGj5ZXlI=')的QSQ7XggEHBUhXDxYLwIFHwh4ZRkwXFI0Pw4jGj5ZXlI=

給它打斷點:

點擊“現在訪問”:此時url=QSQ7XggEHBUhXDxYLwIFHwh4ZRkwXFI0Pw4jGj5ZXlI=

不斷點擊(step over next function call),當走完strdecode()函數后,url更新為要訪問的頁面。下一步就是找到這個函數并分析。

找到的strdecode()函數如下:此時

string='QSQ7XggEHBUhXDxYLwIFHwh4ZRkwXFI0Pw4jGj5ZXlI='

再經過base64decode以后變成了一段亂碼:

重新打一次斷點:經過base64decode(code)后,返回需要的Url;至此所有的斷點調試就完成了。

這是base64decode函數的代碼,里面有一個base64DecodeChars的變量,在函數里是沒有定義的,因此后期自己加上。

function base64decode(str) {
? ?var c1, c2, c3, c4;
? ?var i, len, out;
? ?len = str.length;
? ?i = 0;
? ?out = "";
? ?while (i < len) {
? ? ? ?do {
? ? ? ? ? ?c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
? ? ? ?} while (i < len && c1 == -1);
? ? ? ?if (c1 == -1) break;
? ? ? ?do {
? ? ? ? ? ?c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
? ? ? ?} while (i < len && c2 == -1);
? ? ? ?if (c2 == -1) break;
? ? ? ?out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
? ? ? ?do {
? ? ? ? ? ?c3 = str.charCodeAt(i++) & 0xff;
? ? ? ? ? ?if (c3 == 61) return out;
? ? ? ? ? ?c3 = base64DecodeChars[c3]
? ? ? ?} while (i < len && c3 == -1);
? ? ? ?if (c3 == -1) break;
? ? ? ?out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
? ? ? ?do {
? ? ? ? ? ?c4 = str.charCodeAt(i++) & 0xff;
? ? ? ? ? ?if (c4 == 61) return out;
? ? ? ? ? ?c4 = base64DecodeChars[c4]
? ? ? ?} while (i < len && c4 == -1);
? ? ? ?if (c4 == -1) break;
? ? ? ?out += String.fromCharCode(((c3 & 0x03) << 6) | c4)
? ?}
? ?return out
}

還有一個問題,最開始visit()的自變量在哪里呢?網頁源代碼中都有的噢。一共16個鏡像對應16個變量。

找到了所有需要的js代碼,然后用python還原???不用自己找虐,python提供一個execjs的庫,可以直接調用js文件。一共15行代碼就可以獲得所需的網址啦。

if __name__ == '__main__':
? ?url='http://ac.scmor.com/'
? ?headers={
? ? ? ?'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
? ?}
? ?html=requests.get(url,headers=headers).text
? ?soup=BeautifulSoup(html,'lxml')
? ?infs=soup.find('head').find_all('script',type='text/javascript')
? ?infs=re.findall(r'autourl(.*?);',str(infs))
? ?node = execjs.get()
? ?file = '谷歌學術鏡像.js'
? ?ctx = node.compile(open(file, encoding='utf-8').read())
? ?for inf in infs:
? ? ? ?data=inf.split('=',1)[1][2:-1]
? ? ? ?js='strdecode("{}") '.format(data)
? ? ? ?print(ctx.eval(js))

最后結果如下:

代碼以及Js文件上傳到GitHub(https://github.com/zuobangbang/javascript-decode/tree/master/google);覺得不錯就star/fork下;有興趣可以自己做一遍。

往期精彩推薦?

2019年,被高估的AI與數據科學該如何發展?

2018年原創精選文章匯總

大型裁員現場,究竟誰笑到了最后...

這一年我都做了些什么?

總結

以上是生活随笔為你收集整理的监听js变量的变化_JS监听事件型爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。