网站屏蔽wget/curl/lynx时,自动化下载文件的解决方案咨询
可行的自动化下载方案
1. 无头浏览器工具(推荐)
无头服务器上优先用支持完整JS渲染的无头浏览器工具,这类工具能模拟真实浏览器环境,绕过大多数基于JS的反爬验证。
Puppeteer(Node.js)
- 先安装依赖:
npm install puppeteer
- 编写下载脚本:
const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { // 启动无头浏览器 const browser = await puppeteer.launch({ headless: 'new', args: ['--no-sandbox'] }); const page = await browser.newPage(); // 若需要预设Cookie,可添加以下代码(替换为实际Cookie信息) // await page.setCookie({ // name: 'your_cookie_key', // value: 'your_cookie_value', // domain: '目标网站域名' // }); // 访问目标文件URL,等待网络请求稳定 await page.goto('目标文件的URL', { waitUntil: 'networkidle2' }); // 获取文件内容并保存 const fileResponse = await page.goto('目标文件的URL'); const fileBuffer = await fileResponse.buffer(); fs.writeFileSync('保存的文件名.ext', fileBuffer); await browser.close(); })();
运行脚本:node download-script.js
Playwright(多语言支持)
Playwright支持Node.js、Python、Java等,用法和Puppeteer类似,优势是支持更多浏览器内核,可按需选择。
2. 命令行调用无头Chromium
如果不想写脚本,可直接用chromium-browser的无头模式下载:
chromium-browser --headless=new --disable-gpu --no-sandbox \ --download.default_directory=/你要保存的路径 \ --download.prompt_for_download=false \ "目标文件的URL"
若需要携带Cookie,可先从浏览器导出Cookie文件,用--load-storage=/path/to/cookie-file参数加载。
3. 手动模拟经过JS验证的请求
如果网站的JS逻辑不复杂,可抓包分析真实请求参数:
- 用正常浏览器打开目标页面,打开开发者工具的「Network」标签
- 触发文件下载,找到对应的请求,复制完整的请求头、Cookie和参数
- 用
curl或wget模拟该请求,示例:
curl -O \ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" \ -H "Referer: 目标页面的URL" \ -b "cookie_key1=value1; cookie_key2=value2" \ "真实的文件下载URL"
注意:若网站有动态生成的签名或token,这个方法可能需要频繁更新参数,适合简单场景。
4. 苹果设备的替代方案
如果苹果设备可配合使用,不用复杂的AppleScript,试试这两种方式:
- 快捷指令+命令行:创建一个接收URL输入并执行下载的快捷指令,然后在终端触发:
shortcuts run "你的快捷指令名称" --input "目标文件的URL"
- 简单osascript脚本:
tell application "Safari" activate set newTab to make new tab at end of tabs of window 1 with properties {URL:"目标文件的URL"} set current tab of window 1 to newTab delay 8 -- 根据文件大小调整等待时间 end tell
运行脚本:osascript download.scpt,注意设备需处于解锁状态。
内容的提问来源于stack exchange,提问作者Seamus
相关产品推荐
相关产品推荐

