如何从JavaScript生成的页面中提取嵌入式XHR数据

来源:网站建设作者:弦宿​头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何从JavaScript生成的页面中提取嵌入式XHR数据》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何从JavaScript生成的页面中提取嵌入式XHR数据》有用,将其分享出去将是对创作者最好的鼓励。

在现代Web开发中,前端页面经常通过JavaScript动态加载数据,其中XHR(XMLHttpRequest)是最常用的异步数据请求方式之一。很多页面的核心数据并不直接写在HTML源码里,而是通过XHR请求从后端接口获取后,由JavaScript动态插入到DOM中。如果要提取这类页面的嵌入式数据,就需要绕过XHR的限制,找到数据加载和嵌入的规律。

如何从JavaScript生成的页面中提取嵌入式XHR数据

XHR的工作原理与数据嵌入流程

XHR是浏览器提供的用于客户端和服务器之间传输数据的接口,允许网页在不重新加载页面的情况下,向服务器发送请求并获取响应数据。典型的数据嵌入流程如下:

  • 页面加载完成后,JavaScript代码触发XHR请求,向后端接口发送数据请求
  • 后端返回JSON、XML等格式的响应数据
  • 前端JavaScript解析响应数据,将其插入到对应的DOM节点中,完成页面内容的渲染

提取嵌入式数据的常用方法

1. 拦截XHR请求直接获取数据

如果目标数据是通过XHR请求返回的,最直接的方式是拦截XHR请求,获取接口返回的原始数据。以浏览器环境为例,可以通过重写XMLHttpRequest的原型方法实现拦截:

// 保存原始的XMLHttpRequest send方法
const originalSend = XMLHttpRequest.prototype.send;
// 重写send方法
XMLHttpRequest.prototype.send = function (body) {
    // 监听请求加载完成事件
    this.addEventListener('load', function () {
        // 判断请求是否为目标XHR接口
        if (this.responseURL.includes('/api/data')) {
            console.log('拦截到XHR响应数据:', this.responseText);
            // 这里可以对响应数据进行处理,提取需要的内容
        }
    });
    // 调用原始的send方法
    originalSend.call(this, body);
};

2. 模拟执行JavaScript获取渲染后的DOM数据

如果数据已经被嵌入到DOM中,也可以通过无头浏览器模拟执行JavaScript,等待页面渲染完成后提取DOM中的数据。以下是使用Puppeteer的示例代码:

const puppeteer = require('puppeteer');

async function extractData() {
    // 启动浏览器
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    // 访问目标页面
    await page.goto('https://ipipp.com/dynamic-page');
    // 等待目标数据所在的DOM节点加载完成
    await page.waitForSelector('.data-container');
    // 提取DOM中的嵌入式数据
    const data = await page.evaluate(() => {
        const container = document.querySelector('.data-container');
        return container.innerText;
    });
    console.log('提取到的嵌入式数据:', data);
    await browser.close();
}

extractData();

3. 分析接口参数直接请求数据接口

如果XHR请求的接口没有复杂的加密校验,也可以直接分析接口的请求参数,模拟发送请求获取数据。以下是使用Node.js的axios库发送请求的示例:

const axios = require('axios');

async function fetchDataFromApi() {
    try {
        const response = await axios.get('https://ipipp.com/api/data', {
            params: {
                page: 1,
                size: 10
            },
            headers: {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
            }
        });
        console.log('接口返回的数据:', response.data);
    } catch (error) {
        console.error('请求接口失败:', error);
    }
}

fetchDataFromApi();

注意事项

在提取嵌入式数据时,需要注意以下几点:

  • 遵守目标网站的robots协议,不要过度频繁请求,避免给服务器造成压力
  • 如果XHR接口有签名、token等校验机制,需要先分析校验逻辑,再模拟请求参数
  • 部分页面的XHR请求是动态生成的,需要结合页面的JavaScript逻辑分析请求触发的时机
提取嵌入式数据的核心是理解页面的数据加载逻辑,根据实际场景选择合适的方法,才能高效准确地获取目标数据。

XHRJavaScript数据提取页面爬取修改时间:2026-07-15 20:09:11

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。