Javascript 如何找到表单参数的存储位置并在请求中使用它们
我试图使用Request和Cheerio来获取数据,但在发布搜索词时遇到了问题 在使用站点时,我看不到在发布期间搜索字符串和所选类别被发送到何处,也看不到如何在请求中使用它们来自动从我的节点应用程序进行搜索 基本上,我希望能够发送不同的搜索词使用请求,然后我可以刮返回的html为我需要的数据 到目前为止,我有:Javascript 如何找到表单参数的存储位置并在请求中使用它们,javascript,node.js,express,web-scraping,requestjs,Javascript,Node.js,Express,Web Scraping,Requestjs,我试图使用Request和Cheerio来获取数据,但在发布搜索词时遇到了问题 在使用站点时,我看不到在发布期间搜索字符串和所选类别被发送到何处,也看不到如何在请求中使用它们来自动从我的节点应用程序进行搜索 基本上,我希望能够发送不同的搜索词使用请求,然后我可以刮返回的html为我需要的数据 到目前为止,我有: request.post('https://www.freelance.nl/opdrachten/zoeken', { form: { key: 'value' } }, fu
request.post('https://www.freelance.nl/opdrachten/zoeken', { form: { key: 'value' } },
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
}
);
但由于我看不到表单数据存储在dev工具中的什么位置,因此无法在“form”对象中发送正确的值。我很确定它在请求负载中,但如何从我的节点应用程序中获得它呢
有没有更简单的方法?我完全是在浪费时间吗
睁开眼睛;)在图像底部,查看请求有效负载
projectFilterForm[keywords]
projectFilterForm[category][]
projectFilterForm[province][]
更新
var request = require('request');
var querystring = require('querystring');
require('request').debug = true;
var data = querystring.stringify({
'projectFilterForm[keywords]': 'java'
});
var options = {
followAllRedirects: true,
uri: 'https://www.freelance.nl/opdrachten/zoeken',
method: 'POST',
headers: {
'Content-Length': Buffer.byteLength(data),
'cache-control': 'no-cache',
'Content-Type': 'multipart/form-data',
'origin': 'https://www.freelance.nl',
'referer': 'https://www.freelance.nl/opdrachten/zoeken',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'
}
};
var req = request(options, function (error, response, body) {
console.log(body);
});
req.write(data);
req.end();
我什么都试过了没有。。。重定向后,我们得到默认页面。也许他们使用了一些会话保护
这不是node的问题。即使在chrome的postman扩展中,我也尝试这样做,但运气不佳。我已粗略修改了您的代码:
payload = {'projectFilterForm[keywords]':'javascript','projectFilterForm[category][]': '1'}
request.post('https://www.freelance.nl/opdrachten/zoeken', { data:payload },
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
}
)) 是的,我看到了,但我不确定如何从我的节点应用程序中获取:(获取它?你的意思是“发布”它是由你的节点应用程序实现的?模拟用户的点击发送表单?是的,这很抱歉缺少咖啡和疲倦=糟糕的解释可能他们使用了一些保护方法,因为发送帖子数据后获取内容的简单方法对我也不起作用。即使使用了邮递员。谢谢你的尝试。我对这种事情还不熟悉。有什么我应该了解的吗这会有帮助吗?或者这是一个失败的原因?它没有帮助。仍然在“body”变量中返回相同的html,就好像我根本没有输入任何表单数据一样