关于spiderdemo第二题的奇思妙想

前言

spiderdemo是练习爬虫案例的网站,如下

反爬虫练习平台https://www.spiderdemo.cn/而第二题需要逆向,但是里面的js代码很麻烦,经过混淆,不想搞怎么办?

直接开始

正文

前置分析

其中参数很容易发现

如下

很明显,sign就是加密参数。

搜索一下关键,很容易发现如下

而其中加密使用的是hex_md5,进去看看

一堆不知道是什么东西

但是笔者发现这个hex_md5都在ob_challenge1.js这个js文件中,于是笔者把这个文件下载来,

添加

javascript 复制代码
let a=hex_md5("17612268353402")
console.log(a)

运行,报错

var ۦۥۥﱠﱣﱟ = WheelEvent, ۥﱣﱠۦﱣۦ = window, ۥﱟۦﱠۥۦ = document, ۥﱟۦﱠۦۥ = navigator, ﱣﱞﱟﱣﱣﱠ = location, ۥﱟۦﱠﱞۦ = history,
^

ReferenceError: WheelEvent is not defined

。。。。

笔者看着也不想逆向,然后,笔者问了AI,AI说是node环境没有window。

笔者突然有个想法,放到html里面试试,如下新建一个a.html文件

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns="">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="ob_challenge1.js">
</script>
<script>
    let a=hex_md5('17612268353402')
    console.log(a)
</script>
<body>

</body>
</html>

Pycharm打开页面

啊,哈哈哈哈哈哈

和前面生成sign一模一样,那说明全部的加密都在这里面,那不需要解混淆,解个寂寞

直接调用html获取参数不就可以了,笔者感觉没问题,说干就干。

调用html

如何调用html,可以使用selenium ,但笔者想使用DP,笔者从来没有使用过,正好尝试一下

DrissionPage官网https://drissionpage.cn/安装过程就不必细说。

笔者想使用如下的代码获取结果

如下是two.py文件

python 复制代码
from DrissionPage import ChromiumPage
page = ChromiumPage()

# 1. 加载本地 HTML(file:// 协议)
html_path = 'file:///' + __import__('os').path.abspath('a.html').replace('\\', '/')
page.get(html_path)
# 2. 执行 JS 并拿结果
md5_val = page.run_js("return hex_md5('17612268353402');")
print('MD5 值:', md5_val)

# 3. 退出
page.quit()

文件位置如下

执行two.py文件,结果如下

哈哈哈哈哈,成功了。

绕过逆向。哈哈哈哈哈

笔者还发现在Pycharm中打开html,如下

有个localhost:63342,那么直接不装了,代码如下

python 复制代码
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get("http://localhost:63342/study-spider/src/spiderDemo/a.html")
for i in range(1,101):
    md5_val = page.run_js(f"return hex_md5('1761226835340{i}');")
    print('MD5 值:', md5_val)
page.quit()

直接对localhost:63342发送请求,结果如下

没问题。既然如此,搞事情

编写爬虫

细节不必多言,直接看代码

python 复制代码
from DrissionPage import ChromiumPage
import time
import requests
html = ChromiumPage()
html.get("http://localhost:63342/.../a.html")
total=0
for page in range(1,101):
    url=f'https://www.spiderdemo.cn/ob/api/ob_challenge1/page/{page}?'
    timestamp=int(time.time()*1000)
    sign=html.run_js(f"return hex_md5('{timestamp}{page}');")
    print("第"+str(page)+"页的参数sign是"+sign)
    cookies = {
        'sessionid': '你的sessionid'
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0'
    }
    params={
        'challenge_type':'ob_challenge1',
        'sign':sign,
        'timestamp':timestamp
    }
    response=requests.get(url,params=params,headers=headers,cookies=cookies)
    success=response.json()['success']
    if not success:
        print("Failed to get valid response")
    else:
        page_total=sum(response.json()['page_data'])
        total+=page_total
print(total)

笔者html页面路径都去掉了,这个每个人的都不同,看个人。

结果

ok。

总结

感觉卡bug了,没有进行逆向之类的。

就是把那个js文件下载下来,放到html里面,使用DP打开html,调用js函数,获取加密后的结果。

哈哈哈哈哈哈哈哈哈哈哈哈。

相关推荐
有味道的男人2 小时前
搜好货平台关键词商品搜索接口:分页容错与商品数据轻量化提取方案
服务器·前端·javascript
B2_Proxy3 小时前
aiohttp 异步爬虫如何配置代理?连接池复用与超时控制实战
爬虫
SEO_juper4 小时前
给网页做可引用性评分:判断内容够不够让 AI 引用(GEO 工具,附代码)
开发语言·人工智能·爬虫·python·seo·独立站
雪雪爱冲浪5 小时前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
软件技术NINI5 小时前
化妆品html+css+js 7页
javascript·css·html
要吃这碗饭5 小时前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
lexiangqicheng5 小时前
自定义表单跨端共用机制-PC设计APP渲染
java·前端·javascript
沙漏无语5 小时前
pnpm 安装@vue-office包的幽灵依赖问题解决
前端·javascript·vue.js
Jmyd01235 小时前
VR全景线上展会制作流程技术解析:全景采集、点云重建与Web端渲染优化实战
前端·javascript·vr·三维数字化
℘团子এ5 小时前
vue2中自定义指令的使用
前端·javascript·vue.js