使用Python从网页的Ajax调用中返回数据

时间:2012-02-27 20:56:07

标签: javascript python ajax

我正在编写一个Python程序,需要使用网站的高级搜索选项。具体而言,搜索页面为 the NVC advanced search page 。我知道我需要搜索的项目和版本的名称,所以理想情况下程序会从下拉列表中选择项目名称和版本号,然后返回结果页面。

我完全不熟悉HTML和Javascript,而且我对Python很新,所以我不知道是否有办法通过Python“点击”这些下拉菜单,然后返回结果。 Javascript进行Ajax调用的事实使情况更加复杂,因为我不能只加载页面的源代码并解析出项目名称和版本列表。

任何拥有Python / Javascript / Ajax经验的人都可以向我发送正确的方向吗?

这个程序的一个例子就是我开始使用项目“glibc”及其版本号'2.3.6'程序将确保这个组合被列出(不保证),然后返回结果页面(大约有13个结果)。

3 个答案:

答案 0 :(得分:1)

Mechanize Python库非常适合表单自动化。有一个如何在examples page上编辑和提交表单的示例。

答案 1 :(得分:0)

高级搜索选项页面通过GET将选项发送到结果页面,为您提供URL(我可以更清楚地使用换行符):

http://web.nvd.nist.gov/view/vuln/search-results?
adv_search=true&
cves=on&
cve_id=&
query=&
cwe_id=&
cpe_vendor=cpe%3A%2F%3Aian_bezanson&
cpe_product=cpe%3A%2Fa%3Aian_bezanson%3Adropbox&
cpe_version=cpe%3A%2Fa%3Aian_bezanson%3Adropbox%3A0.0.3_beta&
pub_date_start_month=0&
pub_date_start_year=2005&
pub_date_end_month=2&
pub_date_end_year=2009&
mod_date_start_month=2&
mod_date_start_year=2007&
mod_date_end_month=9&
mod_date_end_year=2009&
cvss_sev_base=&cvss_av=&
cvss_ac=&
cvss_au=&
cvss_c=&
cvss_i=&
cvss_a=

然后需要进行一些调查才能弄清楚该网址的哪一部分是表单中的信息,但是应该让你只是抓取结果页面。

答案 2 :(得分:0)

如果人类用户正在使用该搜索页面,他们会点击其中一个产品链接,然后从另一个页面加载产品列表,例如:

http://web.nvd.nist.gov/view/vuln/cpe/cpe-chooser?index=0&component=Vendor

遗憾的是,此页面未使用JSON,因此他们对响应进行了一些自定义的javascript解析。然后,来自此响应的数据将显示为用户的下拉列表。当用户选择产品时,浏览器会选择正确的value,以便在提交表单时,它将成为查询的一部分。 e.g:

http://web.nvd.nist.gov/view/vuln/search-results?adv_search=true&cves=on&cpe_vendor=cpe%3A%2F%3Aa-a-s_application_access_server

在此,cpe_vendor=cpe%3A%2F%3Aa-a-s_application_access_server是重要的部分。 =符号前面的部分是字段名称,后面的部分是选定的值(最初来自ajax请求)。有趣的%3A位是URL编码。

因此,您实际上不需要与页面进行交互,因为您知道要搜索的供应商和产品的名称;您只需要查找字段名称(供应商的cpe_vendor)和特定产品/供应商的值(上面示例中的cpe:/:a-a-s_application_access_server),然后请求普通搜索URL。 / p>