目的:使用selenium + Chrome爬取某网站指定类型的乌云公开漏洞文章,即在win10终端输入漏洞类型(如未授权),则爬取所有该类型的漏洞文章,并把每个分页的数字作为文件夹名,来保存该分页下面的所有的漏洞文章。
总结:本例只是能简单的爬取某一类型漏洞的所有文章,但不能爬取多个类型漏洞的所有文章,有时可能会有一些小bug导致没爬取完就崩溃,需要手工修改进而重新爬。其它问题解决看注释。
- 关于python代码里面出现中文在windows里面的处理,还没完全掌握。可参考Python for Windows 中文编码问题汇总
- 遇到的超时问题TimeoutException: Message: timeout 还没解决
- 本例代码只是输入漏洞的指定类型,才可以爬取其所有文章。但如想一块爬取漏洞的类型如 未授权、sql等,导入paramunittest也没搞定
代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
from lxml import etree
import urllib2
import pdfkit
import random
import os
import shutil
import urllib
# import chardet
import paramunittest
# @paramunittest.parametrized(
# {'user':'编辑器漏洞','result':'true'},
# {'user':'未授权','result':'true'},
# )
class wooyunSelenium(unittest.TestCase):
# class TestDemo(unittest.TestCase):
'''
利用unittest模块的测试类来解决js分页,模拟点击下一页。
'''
def setUp(self):
# def setParameters(self, user, result):
'''
初始化方法(固定写法),为测试准备环境。
'''
# self.user = user
# self.result = result
# 创建谷歌浏览器对象。
self.driver = webdriver.Chrome()
# 创建无头浏览器对象,实测速度比谷歌浏览器的要快点,但不是很多,没有浏览器窗口界面。
# self.driver = webdriver.PhantomJS()
# input输入的提示语如果是字符串,要加双引号,如果是数字,直接输入(python2),如果是raw_input函数,则不管输入的是什么,全部返回的类型为字符串类型。
# vname = input('请输入要查询的漏洞类型:'