我是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);
});
});
答案 0 :(得分:1)
您无法使用HTTP请求执行客户端JavaScript函数。
以下是加载该页面时会发生的情况:
服务器(您尝试获取的网站)收到HTTP请求(来自您)
服务器生成初始HTML并响应发出上述请求的人,无论是浏览器还是NodeJS代码。 这个“初始”HTML是您通过简单的HTTP请求获得的。(在您的情况下不包含您需要的结果)
如果HTML是在浏览器中提供的,则会执行其他客户端JavaScript代码(即您尝试执行的“javascript函数”)。 这只能在浏览器(或类似浏览器)环境中发生。此JavaScript代码(或函数)修改 HTML(在浏览器环境中加载时,使用DOM)从而呈现最终的HTML。您无法通过简单的HTTP请求 * 来获得这些结果,因为这只会让您直到#2。
*您可以找出客户端javascript用于获取这些结果的URL。控制台工具中的网络选项卡可能有助于此。当您点击触发它的按钮来获取结果时,请关注哪些请求。
。
在你的情况下,似乎是从http://www.capetown.gov.za/_vti_bin/client.svc/ProcessQuery获取带有POST请求的JSON,虽然它看起来并不简单,但是它会根据前一个请求发出一系列请求,至少它们看起来像是第一眼。您可以自己探索这条路线。
因此,为了获得最终的HTML,您将
需要提供这些结果的直接网址。这通常是最快的,但需要了解网站的API以及如何通过AJAX(通过客户端JavaScript获取)获取结果
在具有浏览器或类浏览器的环境中使用fetcher。例如。 PhantomJS (deprecated),Puppeteer,selenium,zombie