【问题标题】:Node js - Trying to send POST request, but it is not loading javascript contentNode js - 尝试发送 POST 请求,但未加载 javascript 内容
【发布时间】:2017-07-26 12:33:10
【问题描述】:

我一直在尝试向网站发送 POST 请求,但尚未加载整个网站。

我猜这是 node js 没有加载 javascript 内容,然后执行它的问题。我可以 SEE 响应中的 javascript,尽管它从不加载 javascript 文件在 html 中生成的内容。

我的意思是,它实际上并不执行 javascript。我将如何制作 node js 代码来克服这个问题,并等待完整的网站加载?我尝试过本机代码和“请求”模块,都产生相同的错误。如果有帮助,我不需要本机 javascript。任何模块都可以。

我尝试过的一些代码(请求模块):

var options = {
method: 'POST',
uri: 'https://url',
formData: {
    'email': 'Email',
    'prize': '0',
    'transactional': 'on'
},
headers: {
    /* 'content-type': 'application/x-www-form-urlencoded' */ // Is set automatically
}
};

rp(options)
.then(function (body) {
   console.log(body)
})
.catch(function (err) {
   console.log(err)
});

【问题讨论】:

  • 贴一些代码。
  • 你需要 phantomjs 之类的东西来处理“动态”网页
  • 为什么会这样? 'node js' 不是网络浏览器...

标签: javascript node.js


【解决方案1】:

当您获取 URL 或 POST 的内容并获得响应时,该响应只是一些文本。 node.js 不解析内容。它不会在该内容中执行 Javascript。这就是浏览器所做的——node.js 不是浏览器。因此,您得到的是从该网站下载到浏览器的 RAW 内容。如果它是一个 HTML 响应,那么您只会得到原始 HTML 页面,并且不会获取或运行任何嵌入的脚本。

如果您想要解析该页面并在其中运行脚本,那么您需要获取一个可以在 node.js 中使用的组件,该组件可以模仿浏览器的功能。获得一个 HTML 解析器并不难,但是要在该页面中实际获取和运行 Javascript 并以一种不会使您的服务器处于危险之中的方式安全地执行此操作,需要做更多的工作。事实上,Google 在索引网页时通常甚至不会运行您的 Javascript(尽管他们在某些情况下一直在使用该技术)。

jsDOMcheerio 是可以在 node.js 中用于从响应中解析 HTML 的几个模块,jsDOM 将在页面中执行脚本,cheerio 不会。

您可以使用的另一个包是 phantomJS,它可以用作基于 webkit 的无头浏览器,您可以通过 node.js 与之通信。

【讨论】:

  • 谢谢!希望我可以 +1 :P
猜你喜欢
  • 2018-07-06
  • 2021-05-08
  • 1970-01-01
  • 2018-03-20
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
相关资源
最近更新 更多