从国家漏洞数据库中删除数据:无法找到点击按钮(Mechanize + Python)

时间:2010-12-09 09:44:00

标签: python mechanize

我试图从National Vulnerbability Database(http://web.nvd.nist.gov)中删除一些数据。我想要做的是输入一个搜索词,它给我带来前20个结果,刮掉那些数据。然后我想点击“下一个20”直到我遍历所有结果。

我能够成功提交搜索字词,但点击“下一个20”根本不起作用。

我正在使用Python + Mechanize的工具

这是我的代码:

# Browser
b = mechanize.Browser()

# The URL to this service
URL = 'http://web.nvd.nist.gov/view/vuln/search'
Search = ['Linux', 'Mac OS X', 'Windows']

def searchDB():
    SearchCounter=0
    for i in Search:
        # Load the page
        read = b.open(URL)
        # Select the form
        b.select_form(nr=0)
        # Fill out the search form
        b['vulnSearchForm:text'] = Search[int(SearchCounter)] 
        b.submit('vulnSearchForm:j_id120')
        result=b.response().read()
        file=open(Search[SearchCounter]+".txt","w")
        file.write(result)

        '''Here is where the problem is. vulnResultsForm:j_id116 is value of the "next 20 button'''
        b.select_form(nr = 0)
        b.form.click('vulnResultsForm:j_id116')
        result=b.response().read()

if __name__ == '__main__':
    searchDB()

2 个答案:

答案 0 :(得分:1)

来自b.form.click的文档字符串:

  

单击控件会返回请求。

     

请求对象是   urllib2.Request实例,你   可以传递给urllib2.urlopen(或   ClientCookie.urlopen)。

所以:

request = b.form.click('vulnResultsForm:j_id116')
b.open(request)
result = b.response().read()

答案 1 :(得分:0)

我没有在zope.testbrowser之外使用Mechanize,whcih基于Mechanize,所以可能存在差异,但这里有:

点击表单...尝试获取按钮,然后单击按钮。 我想是这样的事情:

form.find_control("j_id120").click()

此外:

b['vulnSearchForm:text'] = Search[int(SearchCounter)] 

可以替换为

b['vulnSearchForm:text'] = i

由于i将包含该值。 Python不是javascript,循环变量不是数字(除非你想要它们)。