使用cheerio自动提交查询(如JQuery)

Mer*_*erc 2 html javascript jquery node.js cheerio

我必须执行以下操作:给定从服务器加载的页面,我必须在加载后自动在该页面中提交表单,并使用相同的字符串(test worked)填充其所有输入字段.这显然是我的问题的简化,但它足够接近!

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

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

目前,我有以下代码:

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 */


  }
};
Run Code Online (Sandbox Code Playgroud)

问题:

  • 目前,submit相对于我下载的页面.我如何确保我在正确的位置提交东西?我应该做url.parse并从URL中找出行动的鸥路径吗?

  • 你如何实际创建一个"帖子"字符串?或者,更好的是,您将如何发布此表单?

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

xmo*_*jmr 8

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

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

您应该知道,许多网站都采用了各种反垃圾邮件措施,如果申请不正确,他们会拒绝您的请求.必须按站点检查.

您还应该知道,在一些受法律起诉的国家,群发邮件或群发表格提交.

您应该知道,基于JSON和REST或SOAP,第三方(除了解析html表单之外)通常会有更容易使用的API.

如果您需要向网络服务器提交页面,则更好的选择是与服务器所有者协商另一个API.即使使用政府服务器也不应该是一个问题,因为许多开放数据由于开放数据倡议而开放(美国,欧洲,印度,......)