html表单提交

时间:2010-07-28 15:40:58

标签: python html automation mechanize

我正在查看外部网站的html表单(不是由我自己维护),格式如下:

<form onsubmit="return check(this)" method=post action=address.aspx target=ttPOST>
....
</form>

我希望将数据发布到此外部网站,而无需通过表单并按提交。

我可以直接转到网址'address.aspx'并使用所需的输入参数附加它吗?

我的目标是自动定期发布信息,从网站上经常变化的值列表中选择。 (使用Python和AutoIt)

6 个答案:

答案 0 :(得分:1)

我应该注意到,我不清楚你是否想要自动从网络浏览器外部发布数据。其他人已经回答了使用脚本这样的事情,比如来自网页,所以当我从一个独立程序中做这件事时,我想我会介绍它是如何工作的。

对于大多数语言,您可以获得有助于模拟Web请求的内容。其中大部分可能会允许您发布帖子请求并提供帖子数据。我不知道python和autoit但是在一般意义上你只需要通过查看表单的HTML来获取名称值对(或者通过检查对服务器的请求可能更好)然后制作一个发布请求。

正如其他人所说,如果您只想将值附加到网址,那么服务器将需要乐意接受GET请求而不是帖子。有时您会发现服务器会愉快地执行此操作(他们不关心表单提交是如何完成的,只要他们获取数据),有时它将专门查找帖子并忽略作为查询字符串的一部分传递的参数

答案 1 :(得分:1)

您可以使用JQuery.post()

<form action="#" class="myForm" method="post">
    <input type="text" id="field1" name="field1" value="" runat="server" />
</form>
// Submit
<div onclick="submit();return false;">Submit</div>

然后submit()函数看起来像

function submit() {
    $.post("address.aspx", $("form.myForm").serialize(), function(data, textStatus)
    {
        // Handle success or error
    });
}

在代码隐藏中,您可以访问帖子变量

Request.Form["field1"]

答案 2 :(得分:0)

method属性从POST更改为GET

了解差异here

您可以使用GET参数(?param1=val1&param2=val2...)的相同语法更改URL以转到外部站点,但要实现此目的,您需要在javascript中自己编写此逻辑

答案 3 :(得分:0)

为什么要绕过表单提交?提交表单并使用HTTP_POST中的值。您可以通过在上面的html中将方法更改为GET来使用HTTP_GET,但表单仍将提交。

将params提交到address.aspx的一种方法是使用javascript ....构建所有参数的字符串,并在用户点击提交按钮时将其提交到address.aspx。您需要禁用提交按钮的默认行为。

答案 4 :(得分:0)

您可以发出AJAX GET请求(将数据附加到URL)并以一定的时间间隔执行它们。

我会推荐jQuery,但在.NET环境中可能并不理想。

  

jQuery.ajax() - http://api.jquery.com/jQuery.ajax/
  jQuery.get() - http://api.jquery.com/jQuery.get/

注意

  

我希望将数据发布到此外部网站,而无需通过表单并按提交。

我认为这意味着您不想实际提交表单,是否要提交表单而不是按提交按钮?如果您确实希望表单提交,那么您确实应该将表单的method属性更改为get而不是post

但是,如果您确实希望保留在表单页面上,并且需要将数据发布到URL字符串中的数据的其他资源(有理由和aganist这样做,您应该查看 - {{3然后只需发出一个AJAX GET请求,否则只需使用AJAX POST数据。无论哪种方式,你都必须进行某种异步调用。

答案 5 :(得分:0)

POST与GET不同 - 如果将所需数据附加到URL,页面将看不到您的变量。也就是说GETTING(a.k.a要)http://www.the-other-site.com/address.aspx?variable1=a&variable2=b将不起作用。

您需要构建POST请求并将其提交到address.aspx

如果你想自己做,那么你需要Python的urllib2模块(更具体地说,Request对象)。如果您想使用预先构建的解决方案,则需要mechanize之类的内容来发布变量。