我试图从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()
答案 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,循环变量不是数字(除非你想要它们)。