- 浏览器环境:在网页的
<script>标签中运行。 - Node.js 环境:在服务器端运行。
- 浏览器开发者工具:作为开发者进行调试时使用。
下面我将详细解释这三种情况。

(图片来源网络,侵删)
浏览器环境
在浏览器中,JavaScript 出于安全考虑,无法直接获取完整的、包含所有 <script> 和 <style> 标签解析后的 HTML 源代码,你只能获取到当前文档的 DOM (Document Object Model) 结构,也就是浏览器已经解析和渲染后的 HTML 树。
获取当前页面的 DOM 结构
这是最常见的需求,你可以使用 document.documentElement.outerHTML 来获取整个 HTML 文档的字符串表示。
示例代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">测试页面</title>
<style>
body { font-family: sans-serif; }
#myDiv { color: blue; }
</style>
</head>
<body>
<h1>这是一个标题</h1>
<div id="myDiv">这是一个 div。</div>
<script>
// 当页面完全加载后执行
window.onload = function() {
// 方法一:获取整个 HTML 文档的字符串
// 这会返回一个包含 <html>, <head>, <body> 等标签的完整字符串
const fullHtmlSource = document.documentElement.outerHTML;
console.log("--- 获取完整的 DOM 源代码 ---");
console.log(fullHtmlSource);
// 方法二:只获取 <body> 标签内的 HTML
const bodyHtmlSource = document.body.innerHTML;
console.log("\n--- 只获取 <body> 内的 HTML ---");
console.log(bodyHtmlSource);
// 方法三:获取特定元素的 HTML
const myDivSource = document.getElementById('myDiv').outerHTML;
console.log("\n--- 获取 id 为 'myDiv' 的元素的 HTML ---");
console.log(myDivSource);
};
</script>
</body>
</html>
重要区别:

(图片来源网络,侵删)
document.documentElement.outerHTML:获取整个<html>元素的源代码,包括<head>和<body>。document.body.innerHTML:获取<body>元素内部的 HTML 代码。element.innerHTML/element.outerHTML:获取特定 DOM 元素的内部或外部 HTML。
局限性: 这种方法获取的是浏览器解析后的 DOM,而不是服务器原始返回的 HTML。
- 所有脚本(
<script>)都已经执行完毕,你看到的是执行后的结果,而不是脚本代码本身。 - 所有 CSS 样式已经应用,你看到的是渲染后的样式,而不是
<style>标签里的 CSS 文本。 - 像实体(
)可能已经被转换成空格。
Node.js 环境
在 Node.js 中,你可以轻松地获取任何网页的原始 HTML 源代码,因为它可以像浏览器一样发送 HTTP 请求。
使用 https 或 http 内置模块(无需安装)
这是最基础的方法,适用于 https 和 http 协议。
const https = require('https');
const url = 'https://www.example.com';
https.get(url, (res) => {
// 检查响应状态码
if (res.statusCode !== 200) {
console.error(`请求失败,状态码: ${res.statusCode}`);
res.resume(); // 消耗响应数据以释放内存
return;
}
let rawData = '';
// 监听 'data' 事件,每当接收到数据块时触发
res.on('data', (chunk) => {
rawData += chunk;
});
// 监听 'end' 事件,当所有数据接收完毕时触发
res.on('end', () => {
try {
// rawData 就是网页的完整源代码
console.log(rawData);
// 在这里可以对 rawData 进行处理,例如使用 cheerio 解析
} catch (e) {
console.error('解析数据时出错:', e);
}
});
}).on('error', (err) => {
console.error('请求发生错误:', err);
});
使用第三方库 axios 或 node-fetch(推荐)
这些库提供了更简洁、更强大的 API(Promise 支持),是现代 Node.js 开发的首选。

(图片来源网络,侵删)
安装库:
npm install axios # 或者 npm install node-fetch
使用 axios 的示例:
const axios = require('axios');
const url = 'https://www.example.com';
axios.get(url)
.then(response => {
// response.data 就是网页的源代码
// axios 会自动处理 Gzip 压缩等
console.log(response.data);
})
.catch(error => {
console.error('获取网页源代码时出错:', error);
});
使用 node-fetch 的示例:
const fetch = require('node-fetch');
const url = 'https://www.example.com';
fetch(url)
.then(response => {
// 检查请求是否成功
if (!response.ok) {
throw new Error(`HTTP 错误! 状态: ${response.status}`);
}
// 将响应体读取为文本
return response.text();
})
.then(body => {
// body 就是网页的源代码
console.log(body);
})
.catch(error => {
console.error('获取网页源代码时出错:', error);
});
浏览器开发者工具
如果你只是想查看某个网页的源代码进行调试,而不是通过程序获取,那么最简单的方法就是使用浏览器开发者工具。
-
打开开发者工具:
- 在 Chrome、Edge、Firefox 等现代浏览器中,按
F12键。 - 或者,在页面上点击鼠标右键,选择“检查”(Inspect)。
- 在 Chrome、Edge、Firefox 等现代浏览器中,按
-
查看源代码:
- 在开发者工具中,切换到 "Elements" (元素) 选项卡,这里显示的是实时的、可交互的 DOM 结构,你可以看到所有元素及其当前样式。
- 切换到 "Sources" (源代码) 选项卡,这里显示的是原始的、未解析的 HTML、CSS 和 JavaScript 文件,这与你右键点击页面选择“查看网页源代码”(View Page Source) 看到的内容是一致的。
| 环境 | 方法 | 说明 | 适用场景 |
|---|---|---|---|
| 浏览器 | document.documentElement.outerHTML |
获取解析后的 DOM 字符串。 | 在当前页面内操作、修改或读取已渲染的 HTML 结构。 |
| Node.js | axios / node-fetch / https |
获取原始的 HTML 响应。 | 爬虫、服务器端抓取数据、API 请求。 |
| 调试 | 浏览器开发者工具 (F12) | 查看原始或实时的代码。 | 开发者手动检查网页结构、样式和脚本。 |
根据你的具体需求选择最合适的方法,如果你想在网页上获取源代码,用的是浏览器环境;如果你想在服务器上获取源代码,用的是 Node.js 环境。
