2024年Web前端最新Python采集群人员数据,记录JavaScript逆向分析过程,2024年最新阿里+头条+腾讯等大厂前端面试题分享

前端框架

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

以 Vue 为例,我整理了如下的面试题。

Vue部分截图

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

进入咱们的目标网站:目标网站

点击登录后点击群管理:

再点击成员管理,进入咱们的数据页面:

在这个页面可以看到有很多的群,我们随便点击一个就可以看到当群的成员数据:

可以看到咱们的群的号码其实就在当前网页的url中…不难想到它的url就是随咱们的群的号码变化的。

以此群为例,咱们看下网页源代码中是否包含咱们的数据,直接搜一下自己的号码即可,因为我自己是肯定在群当中的嘛:

emmm什么都没有,再去网页元素中看一下吧:

网页元素中是有的,一个tr标签保存了一个成员信息。不过我群里九百多个人,为什么右边的进度条这么粗…

说明什么?异步加载咯,经常说到得瀑布流,当我们拉动下滑条的时候才会刷新出更多得成员数据

明显看得到吧,当我们拉动下滑条后,元素中的元素变多了,那个进度条变短了。

分析(x1)

======

那么就可以总结出来思路了,就是当我们用selenium模拟人打开一个浏览器,然后我们登录、点开群管理、找到需要采集的群点击(或者直接进入到当前群的url也是可行的)、最后就是拉动下滑条然后用selenium从网页元素上爬取数据咯。

应该不难理解吧,这其实就是我们刚才人为做的一个事情。我只是用selenium代替我们人去模拟这个事情再做一遍。

而我反复强调过:selenium的速度太慢太慢,尽量不要去使用它!

那么怎么办?抓包呗,网页源代码中没有数据,而下拉滑动条后网页元素中出现了该数据,不就是说明当我们拉动下滑条就执行了一些JavaScript脚本或者一些接口从而产生了数据?

数据也是不可能无中生有的,总有个来源,咱们监听下服务器与客服端的一个交流过程:

刷新当前网页抓包后,可以看到咱们抓的包当中生成了0-20就是21条数据,然后再看看这个包需要的参数:

是一个post请求,然后参数的话…gc貌似就是群的号码,然后st为0、end为20啥的估计就是说0-20总共21条数据吧,bkn…大头菜,明显不是一个时间戳,按道理是JavaScript加密。

我们再拉动点滑动条往下面拉,再抓一个包看看有没有什么参数发生变化:

果然0-20就是代表一个数据的排序,比如我第一个包是0-20是前面的21条数据,那么第二个包当然就是21-41了。

果然,第三个包也是按21的步差来的,而sort为零不变,bkn也不变。

分析(x2)

=======

走吧,开始去分析咱们的bkn是如何生成的:

上次有人问我,这个玩意该怎么搜…我这里告诉你们了,先点一下那三个点,然后点击search:

可以看到就一个JS文件中包含bkn,简直完美了,事情变得越来越简单。

请不要遇到JavaScript加密就闹心,静下心来好好看看

o.data.bkn

o字典里面的data里面的bkn就是个嵌套而已,也就是说明bkn属于o字典里面的一个键,然后它居然赋值给了一个函数function,注意看结尾用了一个()啥意思?

把把函数赋值给一个变量bkn,然后调用该函数。说明什么?bkn就为函数中return的值呀…是不是很简单?看不懂多看几遍。

函数里面的话就是个循环咯,当条件不满足时就一直加,知道条件满足为止。看不懂可以去学学基本的JavaScript语法,不学也问题不大,咱们直接抠JavaScript代码也行。

for (var e = $.cookie(“skey”), t = 5381, n = 0, o = e.length; n < o; ++n)

t += (t << 5) + e.charAt(n).charCodeAt();

return 2147483647 & t

e为cookie中"skey"键所对应的值,o为e这个字符串的长度,n起始值为0…居然都是已知数据,压根没有变量,那么咱们看看skey对应的值是啥:

好像问题是已经解决了吧,那么咱们来测试一下:

看下与咱们的post参数是否相同:

emmmmm,大功告成拉!

分析(x3)

=======

总结下思路:

1.利用selenium打开浏览器然后登录

2.获取cookies保存(后期用来解密bkn的)

3.解密JavaScript

4.发送post请求想要采集的群号

代码

==

JS代码:

function GetBkn(e) {

for (t = 5381, n = 0, o = e.length; n < o; ++n) t += (t << 5) + e.charAt(n).charCodeAt();

return 2147483647 & t

}

Python代码:

#!/usr/bin/python3

-- coding: utf-8 --

@Time : 2019/6/02 21:44

@Author : 善念

@File : demo12.py

@Software: PyCharm

from selenium import webdriver

from time import sleep

import json

import requests

import execjs

import jsonpath

import sys

def get_cookies():

driver = webdriver.Chrome()

driver.get(‘https://qun.qq.com/manage.html#click’)

driver.find_element_by_xpath(‘//*[@id=“headerInfo”]/p[1]/a’).click()

sleep(5)

input(‘登陆后请按Enter’)

cookie_list = driver.get_cookies()

cookie = {}

for i in cookie_list:

cookie[i[“name”]] = i[“value”]

with open(“cookies.txt”, “w”) as f:

f.write(json.dumps(cookie))

f = open(“cookies.txt”)

字符串转字典

cookies = json.loads(f.read())

f.close()

driver.close()

return cookies

def get_bkn(cookies):

e = cookies[‘skey’]

with open(“gtk.js”, encoding=‘utf-8’) as f:

jsData = f.read()

js_text = execjs.compile(jsData)

bkn = js_text.call(‘GetBkn’, e)

return bkn

def get_data(bkn, cookies):

headers = {

‘origin’: ‘https://qun.qq.com’,

‘referer’: ‘https://qun.qq.com/member.html’,

‘sec-fetch-mode’: ‘cors’,

‘sec-fetch-site’: ‘same-origin’,

‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36’,

‘x-requested-with’: ‘XMLHttpRequest’,

}

qq_group = input(‘请输入你要查询的QQ群号码:’)

offset = 21

max_num = []

for index, i in enumerate(range(0, 5000, offset)):

data = {

‘gc’: qq_group,

‘st’: i,

最后

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

(0, 5000, offset)):

data = {

‘gc’: qq_group,

‘st’: i,

最后

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了

[外链图片转存中…(img-3ysGBCYy-1715428249751)]

[外链图片转存中…(img-kbGwahpU-1715428249752)]

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值