我在用requests爬取数据,但是发现前端向服务器发送的请求实际上是加密的,加密模式是 aes-128-ecb ,加密函数可能是开发人员自己写的,我用python的Crypto包加密后,结果跟他不一样,我的水平还没办法用 python 模拟出加密函数,所以有没有什么办法可以直接获取网页的源 js 文件,并且直接调用里面的加密函数?
ps:由于内网限制,不能使用 selenium等交互工具,只能用 requests
如果你无法模拟加密函数,可以尝试直接获取网页的源 js 文件,并调用其中的加密函数。
一种方法是使用 requests 库获取网页源码,然后从中提取出 js 文件的链接。具体代码示例如下:
python
import requests
from bs4 import BeautifulSoup
url = 'https://example.com'
resp = requests.get(url)
soup = BeautifulSoup(resp.text, 'html.parser')
scripts = soup.find_all('script') # 找到所有的 script 标签
for script in scripts:
if script.attrs.get('src'): # 如果标签包含 src 属性,说明是外部 js 文件
if 'example.js' in script.attrs['src']: # 将 example.js 替换成实际的 js 文件名
js_url = script.attrs['src']
break
得到 js 文件的链接 js_url 后,你可以再次使用 requests 库获取该文件的源码。具体代码示例如下:
python
js_resp = requests.get(js_url)
js_code = js_resp.text
在获取到 js 代码之后,你可以根据实际情况找到其中的加密函数,并将其复制到 Python 中进行调用。注意,如果加密函数依赖于其他函数或库,你也需要将这些函数或库同时复制过来。
requests不是交互式的,但是selenium是,如果你使用selenium,那么是可以使用execute_scripts()在打开特定网页的情况下,执行你的JS代码的。