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

如何用Puppeteer获取网站JSON响应?谷歌翻译接口问题求助

解决Puppeteer获取谷歌翻译API响应而非自动下载的问题

我之前也碰到过类似的情况——调用谷歌翻译的这个API接口时,浏览器会自动触发JSON文件下载,用Puppeteer写自动化代码的时候,明明想把响应内容打印到控制台,结果文件还是自动存到磁盘里了。

先看看你原来的代码:

const puppeteer = require('puppeteer');
(async () => { 
const browser = await puppeteer.launch({headless:false, args: ["--no-sandbox"]}); 
const page = await browser.newPage(); 
// Approach 1: 
const response = await page.goto('https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=zh&dt=t&q=Edit%20Report'); 
let text = await response.text(); 
console.log(text); 
let json = await response.json(); 
console.log(json); 
await browser.close(); 
})();

问题出在这个API的响应头里,它设置了Content-Disposition: attachment,浏览器看到这个头就会自动触发下载,Puppeteer默认会跟着浏览器的行为走,所以你的代码拿不到响应内容,反而文件被存到磁盘了。

要解决这个问题,我们可以用Puppeteer的请求/响应拦截机制,在浏览器处理下载之前直接捕获响应内容。这里有两种可行的方案:

方案一:用Puppeteer监听响应事件

通过启用请求拦截,然后监听所有响应,筛选出我们目标的翻译API请求,直接提取内容:

const puppeteer = require('puppeteer');

(async () => { 
  const browser = await puppeteer.launch({headless:false, args: ["--no-sandbox"]}); 
  const page = await browser.newPage(); 

  // 开启请求拦截
  await page.setRequestInterception(true);

  // 允许所有请求正常发送
  page.on('request', (request) => {
    request.continue();
  });

  // 监听所有响应,捕获目标API的内容
  page.on('response', async (response) => {
    const targetUrl = 'translate.googleapis.com/translate_a/single';
    if (response.url().includes(targetUrl)) {
      try {
        const responseText = await response.text();
        console.log('原始响应内容:', responseText);
        
        const parsedJson = JSON.parse(responseText);
        console.log('解析后的JSON:', parsedJson);
      } catch (err) {
        console.error('处理响应出错:', err);
      }
    }
  });

  // 访问目标API地址
  await page.goto('https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=zh&dt=t&q=Edit%20Report'); 

  await browser.close(); 
})();

方案二:直接用Node.js的fetch请求(更高效)

其实这个谷歌翻译的公开API不需要浏览器环境,直接用Node.js内置的fetch(或者axios)请求就行,完全绕开Puppeteer的下载问题:

async function fetchTranslation() {
  const apiUrl = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=zh&dt=t&q=Edit%20Report';
  const response = await fetch(apiUrl);
  const responseText = await response.text();
  
  console.log('原始响应:', responseText);
  const translationResult = JSON.parse(responseText);
  console.log('翻译结果JSON:', translationResult);
}

fetchTranslation();

这两种方案都能让你拿到响应内容而不是自动下载文件,如果你一定要用Puppeteer的话,方案一就可以解决问题;如果只是要调用翻译API,方案二更轻便高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:32:27