无头浏览器
爬虫
需求:
信息搜集,获取js文件,然后寻找chunk,找到隐藏的接口
实现:
- 爬取站点JS脚本
pip install selenium webdriver-manager
import os
import time
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
def download_js_files(url, output_dir):
# 创建输出目录
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 设置无头浏览器选项
options = Options()
options.add_argument('--headless') # 无头模式
options.add_argument('--disable-gpu') # 禁用 GPU 加速
options.add_argument('--no-sandbox') # 禁用沙盒模式
options.add_argument('--disable-dev-shm-usage') # 禁用 /dev/shm
# 初始化 WebDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get(url)
# 等待页面加载完成(可以根据需要调整等待时间)
time.sleep(5)
# 获取所有 script 标签
script_tags = driver.find_elements(By.TAG_NAME, 'script')
# 下载每个 JS 文件
for script in script_tags:
js_url = script.get_attribute('src')
if js_url:
if not js_url.startswith('http'):
# 处理相对路径
js_url = requests.compat.urljoin(url, js_url)
# 获取文件名
filename = os.path.basename(js_url)
filepath = os.path.join(output_dir, filename)
# 下载 JS 文件
response = requests.get(js_url)
response.raise_for_status()
with open(filepath, 'wb') as f:
f.write(response.content)
print(f"下载完成: {js_url} -> {filepath}")
# 关闭浏览器
driver.quit()
if __name__ == "__main__":
url = input("请输入要爬取的网页 URL: ")
output_dir = input("请输入保存 JS 文件的目录: ")
download_js_files(url, output_dir)
- 从中提取接口
过滤chunk