获取application / x-www-form-urlencoded所需的密钥

时间:2014-09-02 10:51:42

标签: python forms

我一直在使用机械化来填写网站上的表格但现在已经改变了,并且一些必填字段似乎被隐藏了,并且在打印所有可用表格时无法再使用机械化进行访问。 我假设它已被修改为使用更多当前方法(application / x-www-form-urlencoded)但我没有找到更新我的脚本以继续以编程方式继续使用此表单的方法。

根据我的阅读,我应该能够直接向提交按钮发送一个字母(键/值对),而不是首先填写表格 - 如果我错了,请纠正我。 但我还没有办法找到所需的密钥...

如果有人可以指出我正确的方向,或者让我直截了当以防不再可能,我会非常感激。

1 个答案:

答案 0 :(得分:2)

在所有情况下,您都无法提取服务器所需的所有字段。

发布目标,即处理POST的代码,是一个黑盒子。您无法查看服务器运行的代码。关于它所期望的最佳信息是原始表单告诉您的浏览器发布的内容。该原始表单不仅包含HTML,还包含随其一起发送的标头(例如cookie)以及浏览器运行的任何JavaScript代码。

在许多情况下,解析为表单发送的HTML就足够了;什么是Mechanize(或者像robobrowser这样的最新现代框架),加上一些cookie处理并确保包括引用者在内的典型标题。但是,如果任何JavaScript代码操纵 HTML或拦截表单提交以添加或删除数据,那么Mechanize或其他Python表单解析器无法复制该步骤。

您的选择是:

  • 反向设计Javascript代码的功能并在Python代码中复制它。浏览器的开发工具可以在这里提供帮助;例如,观察网络选项卡上发布的内容,或使用调试器逐步执行JavaScript代码以查看其功能。

  • 使用由Python控制的实际浏览器。 Selenium可以为你做这件事;它可以驱动桌面浏览器(Chrome,Firefox等),也可以用来驱动无头浏览器实现,如PhantomJS。这在资源上比较重,但实际上会运行JavaScript代码并让您像浏览器一样以各种方式发布表单。