You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取网页中无iframe且网络面板无请求的内嵌下载链接?

受保护LMS中隐藏下载链接的提取标准流程

针对这类点击<a>标签触发下载但真实链接无迹可寻的场景,可按以下流程提取:

1. 开启全量网络请求捕获,排查隐藏的下载请求

默认浏览器开发者工具的网络面板可能过滤了部分请求(如文档类或重定向请求),可通过Selenium配置浏览器日志,捕获所有请求细节:

  • 配置Chrome浏览器的性能/网络日志,开启全量请求记录:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import json
    
    chrome_options = Options()
    # 开启性能日志,包含全量网络请求信息
    chrome_options.set_capability('goog:loggingPrefs', {'performance': 'ALL'})
    driver = webdriver.Chrome(options=chrome_options)
    
    # 定位目标元素并触发点击
    bigger_tag = driver.find_elements(By.XPATH, "//div[@class='activityinstance']//a[@class='aalink'][contains(@href, 'https://lms.nust.edu.pk/portal/mod/resource/view.php?') or contains(@href, 'https://lms.nust.edu.pk/portal/mod/url/view.php')]")
    for tag in bigger_tag:
        tag.click()
        # 解析性能日志,筛选下载相关请求
        logs = driver.get_log('performance')
        for log in logs:
            message = json.loads(log['message'])['message']
            # 定位返回PDF的请求
            if 'response' in message['params'] and 'contentType' in message['params']['response']['headers']:
                if message['params']['response']['headers']['contentType'] == 'application/pdf':
                    print("真实下载链接:", message['params']['response']['url'])
    
  • 重点关注Content-Type为application/pdf或响应头包含Content-Disposition: attachment的请求,这类请求的URL即为真实下载链接。

2. 复用会话直接请求<a>标签的跳转地址

这类LMS的<a>标签href通常是权限验证页面,后端验证会话后会重定向到真实下载链接,可复用Selenium的会话直接请求该地址:

  • 提取<a>标签的href,用requests库带上Selenium的Cookies发送请求,跟踪重定向:
    import requests
    
    session = requests.Session()
    # 复制Selenium中的会话Cookies到requests
    for cookie in driver.get_cookies():
        session.cookies.set(cookie['name'], cookie['value'], domain=cookie['domain'])
    
    for tag in bigger_tag:
        href = tag.get_attribute('href')
        response = session.get(href, allow_redirects=True)
        # 若最终响应为PDF,其URL即为真实下载链接
        if response.headers.get('Content-Type') == 'application/pdf':
            print("真实下载链接:", response.url)
        # 或检查重定向链的最终地址
        elif len(response.history) > 0:
            print("真实下载链接:", response.url)
    

3. 分析前端点击事件的JS逻辑

很多场景下<a>标签的点击被JS劫持,通过异步请求生成临时下载链接,可通过以下方式分析:

  • 在浏览器开发者工具的Elements面板查看<a>标签的onclick属性,或在Sources面板搜索该元素的事件监听函数,定位处理下载的JS代码;
  • 用Selenium直接执行对应的JS逻辑,获取生成的下载链接:
    # 假设点击事件由名为getDownloadUrl的函数处理
    download_url = driver.execute_script("return getDownloadUrl();")
    print("真实下载链接:", download_url)
    

4. 用流量拦截工具捕获下载请求

使用selenium-wire这类可拦截浏览器全量网络请求的工具,直接捕获下载请求的URL:

  • 安装并配置selenium-wire,点击元素后遍历请求记录:
    from seleniumwire import webdriver
    
    driver = webdriver.Chrome()
    # 定位并触发元素点击
    for tag in bigger_tag:
        tag.click()
        # 遍历所有请求,筛选PDF下载请求
        for request in driver.requests:
            if request.response and request.response.headers.get('Content-Type') == 'application/pdf':
                print("真实下载链接:", request.url)
                break
    

内容的提问来源于stack exchange,提问作者Geek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:45:36