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

Linux中使用wget抓取网站时如何启用JavaScript支持?

嘿,刚好碰到过类似的问题!先给你划个重点:wget本身是纯静态的HTTP抓取工具,完全不会执行JavaScript——这就是为什么你抓那些依赖JS渲染的网站(比如滑动加载内容、单页应用)会失效的原因。下面给你几个实用的解决办法,从简单到灵活都有:

方案一:用无头浏览器抓渲染后的页面(最靠谱)

这类工具会模拟真实浏览器的环境,先执行页面里的JS,等内容完全渲染出来后再抓取,是处理动态网站的标准方案。

1. Puppeteer(Chrome官方出品,Node.js生态)

首先得装Node.js,然后安装Puppeteer:

npm install puppeteer

接着写个简单的抓取脚本(比如叫crawl.js):

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  // 启动无头浏览器
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  
  // 打开目标页面,等待网络空闲确保JS加载完成
  await page.goto('http://example.com/index.html', { waitUntil: 'networkidle2' });
  
  // 获取渲染后的完整HTML
  const renderedHtml = await page.content();
  
  // 把HTML保存到指定路径
  fs.writeFileSync('/home/example_rendered.html', renderedHtml);
  
  // 如果要像wget那样抓取整个站点的资源,可以用page.route拦截并保存静态资源(比如图片、CSS)
  // 这里只是基础示例,复杂的镜像需求可以查Puppeteer的文档扩展
  
  await browser.close();
})();

运行脚本就能拿到渲染后的页面:

node crawl.js

2. Playwright(跨浏览器支持,功能更全)

Playwright支持Chrome、Firefox、Safari,用法和Puppeteer类似但扩展性更强:
先安装依赖:

npm install playwright
npx playwright install

脚本示例(crawl-playwright.js):

const { chromium } = require('playwright');
const fs = require('fs');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  
  await page.goto('http://example.com/index.html', { waitUntil: 'domcontentloaded' });
  
  // 保存渲染后的HTML
  const html = await page.content();
  fs.writeFileSync('/home/example.html', html);
  
  await browser.close();
})();

3. PhantomJS(老牌命令行工具,无需写复杂脚本)

PhantomJS是轻量的无头浏览器,直接用命令行就能搞定:
安装后,先写个简单的脚本save-page.js:

var page = require('webpage').create();
var system = require('system');
var targetUrl = system.args[1];
var savePath = system.args[2];

page.open(targetUrl, function(status) {
  if (status === 'success') {
    fs.write(savePath, page.content, 'w');
    console.log('页面已保存到' + savePath);
  } else {
    console.log('页面加载失败');
  }
  phantom.exit();
});

然后执行命令:

phantomjs save-page.js http://example.com/index.html /home/example.html

方案二:wget配合JS渲染服务(适合执念wget的场景)

如果你特别想用wget,可以先通过一个JS渲染服务把动态页面转成静态HTML,再用wget抓取。比如用Google开源的rendertron:

  1. 先用Docker启动渲染服务:
docker run -p 3000:3000 rendertron/rendertron
  1. 然后用wget抓取渲染后的页面:
wget --page-requisites --no-parent --mirror http://localhost:3000/render/http://example.com/index.html -P /home/

不过这种方式适合简单场景,复杂站点的效果不如无头浏览器。

方案三:用httrack(更强大的网站镜像工具,支持基础JS等待)

httrack是比wget更专业的网站镜像工具,可以配置等待时间让JS加载:
安装后执行命令:

httrack http://example.com/index.html -O /home/example_mirror --mirror --delay=1 --wait=2

--wait=2表示等待2秒让JS完成渲染,不过它的JS支持不如无头浏览器完善,适合半动态的网站。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:06:58