从HTML请求执行Javascript函数

时间:2018-03-16 00:25:53

标签: javascript html json node.js parse-platform

我是JS的新手,我正在尝试在网站上执行一个函数,以JSON格式提取表中的所有数据。

我正在使用Parse Cloud Code发送我的http请求,请求本身正在运行,但我似乎无法获得数据本身。

似乎我只能用HTML获取它,即使这样,对象也不会像在网页元素中那样显示。

非常感谢任何帮助/建议!

提前谢谢。

这是链接:

http://www.capetown.gov.za/Media-and-news#k=thinkwater

以下是代码:

Parse.Cloud.define('hello', function(req, res) {
  res.success('Hi');
});

Parse.Cloud.define('htmlTest', function(req, res) {
  Parse.Cloud.httpRequest({
    method: 'POST',
    url: 'http://www.capetown.gov.za/Media-and-news#k=thinkwater',
    params: {
      action: '/Media-and-news',
      id: 'aspnetForm',
      onsubmit: 'javascript:return WebForm_OnSubmit();'
    },
    headers: {
      'Content-Type': 'application/json;charset=utf-8'
    }
  }).then(function(httpResponse) {
    // success
    res.success(httpResponse.text);
  }, function(httpResponse) {
    // error
    res.error('Request failed with response code ' + httpResponse.status);
  });
});

1 个答案:

答案 0 :(得分:1)

您无法使用HTTP请求执行客户端JavaScript函数。

以下是加载该页面时会发生的情况:

  1. 服务器(您尝试获取的网站)收到HTTP请求(来自您)

  2. 服务器生成初始HTML并响应发出上述请求的人,无论是浏览器还是NodeJS代码。 这个“初始”HTML是您通过简单的HTTP请求获得的。(在您的情况下不包含您需要的结果)

  3. 如果HTML是在浏览器中提供的,则会执行其他客户端JavaScript代码(即您尝试执行的“javascript函数”)。 这只能在浏览器(或类似浏览器)环境中发生。此JavaScript代码(或函数)修改 HTML(在浏览器环境中加载时,使用DOM)从而呈现最终的HTML。您无法通过简单的HTTP请求 * 来获得这些结果,因为这只会让您直到#2。

  4. *您可以找出客户端javascript用于获取这些结果的URL。控制台工具中的网络选项卡可能有助于此。当您点击触发它的按钮来获取结果时,请关注哪些请求。

    在你的情况下,似乎是从http://www.capetown.gov.za/_vti_bin/client.svc/ProcessQuery获取带有POST请求的JSON,虽然它看起来并不简单,但是它会根据前一个请求发出一系列请求,至少它们看起来像是第一眼。您可以自己探索这条路线。

    因此,为了获得最终的HTML,您将

    1. 需要提供这些结果的直接网址。这通常是最快的,但需要了解网站的API以及如何通过AJAX(通过客户端JavaScript获取)获取结果

    2. 在具有浏览器或类浏览器的环境中使用fetcher。例如。 PhantomJS deprecated),Puppeteerseleniumzombie