提问者:小点点

从节点js HTTP请求返回的HTML不同于从浏览器请求返回的HTML


当我使用NodeJS请求HTML页面时,我面临着一个奇怪的行为。当我使用浏览器请求页面时,返回的响应(HTML中)是不一样的。主要是图像SRC在两种情况下是不同的。

下面是返回页面的截图代码:(我尝试使用axios,needlejs,,requestsjs和puppeteerjs来处理相同的问题)

const axios = require('axios')
const cheerio = require("cheerio");

axios.get('https://www.amazon.de/dp/B079N6SKDD')
  .then(function (response) {
    const $ = cheerio.load(response.data);
    let dpDecription = $("#aplus3p_feature_div").html()
    console.log(dpDecription);
  })
  .catch(function (error) {
    console.log(error);
  })

这将返回这样的div(不带图像),图像SRC的名称中包含“grey-pixel”:https://images-na.ssl-images-amazon.com/images/g/01/x-locale/common/grey-pixel.gif

当我使用浏览器获得相同的页面时,我可以正常地看到带有图像的div,并且img SRC正确地引用了img source:https://www.amazon.de/dp/b079n6skdd-->;Produktinformation(英文产品信息)

如何解决此问题?我需要能够返回div与图像使用Nodejs和Cheerio。


共1个答案

匿名用户

每个请求都得到相同的HTML。

您的困惑正在到来,因为您正在DOM检查器中检查“浏览器获取的代码”。它不显示页面的源代码(查看>Developer>View source)。它显示了DOM当前状态的序列化。

页面中的JavaScript在HTML被解析后更改了这些图像的src

您需要对JavaScript进行反向工程,然后在下载的HTML上复制它的效果,或者执行JavaScript(例如通过无头浏览器API,如CasperJS)。

相关问题