2

我必须做以下事情:给定一个从服务器加载的页面,我必须在加载后自动在该页面中提交一个表单,用相同的字符串 ( test worked) 填充其所有输入字段。这显然是对我的问题的简化,但已经足够接近了!

目前我正在获取表格,并使用https://github.com/cheeriojs/cheerio来探索它:

var URL = http://www.example.com/form/index.html"
// ...load the page ...
$ = cheerio.load( fetchedPageText );

目前,我有以下代码:

var $ = cheerio.load( fetchedPageText );

var forms = $('form');
for( var i1 = 0, l1 = forms.length; i1 < l1; i1 ++ ){
  var form = forms[ i1 ];

  inputFields = $( 'input', form );


  console.log("******FORM ACTION: ", form.attribs.action );
  console.log("******FORM: ", form );

  for( var i2 = 0, l2 = inputFields.length; i2 < l2; i2 ++ ){
    var inputField = inputFields[ i2 ];

    console.log( inputField );
    console.log("**************INPUT FIELD ", inputField );


    /* At this point, I have `action` and every input field */


  }
};

问题:

  • 目前,submit是相对于我下载的页面。我如何确保我在正确的位置提交东西?我应该执行 url.parse 并从 URL 中计算出操作的海鸥路径吗?

  • 您如何实际创建“发布”字符串?或者,更好的是,您将如何发布此表格?

  • 我意识到这可能不起作用(表单可能有 Javascript 等)。但是,在提交此表格时,我还有什么需要注意的吗?

4

1 回答 1

8

要将表单发布到正确的地址,您必须将页面的基本 url 和 post 属性中的一个结合起来。url.resolve(from, to)可以提供帮助

要发布表单,您可以使用例如http://visionmedia.github.io/superagent/或其他支持application/x-www-form-urlencoded 的ajax 库

您应该知道,许多网站都采用了各种反垃圾邮件措施,如果格式不正确,它们将拒绝您的请求。必须根据每个站点进行检查。

您还应该知道,在某些国家/地区,大量邮寄或大量提交表格会受到法律起诉。

您应该知道,基于 JSON 和 REST 或 SOAP 的第三方(除了解析 html 表单)通常使用更简单的 API 。

如果您需要合法地将页面提交到 Web 服务器,更好的选择是与服务器所有者协商另一个 API。即使是政府服务器也应该不是问题,因为由于开放数据计划(美国、欧洲、印度等),其中许多服务器正在开放。

于 2014-04-17T06:06:15.277 回答