2

我正在尝试完成一些自动化,包括在网页上提交表单。表单的值已经按列表中的项目进行了编码。

我已经用 Python 尝试了许多不同的模块,但似乎没有什么能给我答案。我无法访问 Visual Basic,而且我个人以前从未处理过 .aspx 页面。这是表单名称 当我找到表单的参数时,我以为我已经设置好并准备好了: function ShowEditForm(id, param1, param2, param3, param4) #actual parameter names removed for security

这是最令人头疼的部分:

<INPUT id=__EVENTTARGET type=hidden name=__EVENTTARGET> <INPUT id=__EVENTARGUMENT     type=hidden name=__EVENTARGUMENT> <INPUT id=__VIEWSTATE type=hidden value=/wEPDw... #This     continues for 800+ characters

我相信这是我的代码失败的原因,我是否正在试图在 python 中发布到 .aspx 表单?

谢谢

4

4 回答 4

1

您需要解析/参数化您的帖子标题和内容。这可能很重要。

查看mechanize以在 HTTP 级别进行访问,并提供一些表单处理便利。

查看selenium,用于在 Python 中驱动真正的浏览器。

于 2012-09-28T19:13:17.497 回答
1

Asp.net 有一个名为 viewstate(加密的页面状态设置)的功能,您不能伪造它,并且页面可能默认使用它,并且在提交回自身(称为回发)时期望在表单上看到.

如果您控制 .aspx 代码,它可能有一个关联的 .cs 或 .vb 文件,其中包含执行表单处理的代码。您可以更改代码以从发布的表单或 URL 参数中获取值,而不是(或附加于)原始表单上的控件。如果站点已编译并且您没有看到任何要更改的 .vb 或 .cs 文件,则您需要找到解决方案的原始源文件。

于 2012-09-28T19:14:10.567 回答
1

我不认为aspx与它有任何关系。

你试过http://pypi.python.org/pypi/selenium吗?

于 2012-09-28T19:02:57.883 回答
1

实际上,如果不存在这些隐藏值,则 POST 请求的服务器端处理将不起作用。ASP.NET 使用这些东西来跟踪多个请求的状态。对 ASP.NET Web 窗体 HTTP 请求进行逆向工程并不是一项有趣的工作。

您可能需要请求页面,抓取它提供给您的隐藏值,并将这些值包含在 POST 中。

逐步完成与页面的手动交互并在诸如 FireBug 之类的东西中捕获请求/响应也将使您对在客户端和服务器之间来回发送的值有一个很好的了解。如果有一些 JavaScript 发送到响应中,它也以服务器预先确定的方式动态修改一些隐藏字段,这不会让我感到惊讶,这有助于指示按下了哪个按钮或以某种方式修改了哪个控件。

于 2012-09-28T19:07:17.580 回答