0x00
最近参加了一些地级市护网,明显感觉到工具的局限性还是蛮大的。对于一些站点所使用的验证码 通过抓包发现其验证方式用一些工具爆破是无法实现的,因此用python写了个识别验证码的脚本。因为一些网站挂有设备的原因 也只是用了单线程。
在护网结束后便找了个爬虫站点练习一下,简单写一个小脚本练习记录一下。写的不太好 后续再不断缩减代码量完善功能
0x01
用的爬虫站点作为新手练习还是很友好的,地址:Spiderbuf-Python爬虫练习场
在练习时 需要提前安装ddddocr这个库 实战中的效果还是蛮不错的,另外爬虫的话我就简单学习了xpath的用法 感觉挺舒服的
0x02
对于该站点抓包验证发现他的post传参如下
分析后面的captchaSolution和captchaId参数就看出来了,一个是6位数的验证码 一个是这个验证码的图片名称
并且验证码只有每次刷新页面才能请求到。简单分析一下就可以写了
0x03
仅仅是作为测试使用写了一个请求的脚本 屎山一样,没有多线程 也不能持续发包....
import requests,ddddocr
from lxml import etree
s = requests.session()
header = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0"
}
url = 'http://spiderbuf.cn/e02/'
result = s.get(url = url,headers = header).text
page = etree.HTML(result)
image_captcha = page.xpath('//*[@id="image"]/@src')#选取属性值 提取图片的地址
def get_captcha(url):#主要识别验证码
captcha_obj = ddddocr.DdddOcr()
for captcha in image_captcha:
captcha = captcha.replace("./", "")#规范图片的url地址
captcha_url = url + captcha
read_captcha = s.get(url=captcha_url, headers=header).content
captcha_end = captcha_obj.classification(read_captcha)#验证码识别
captcha_data = captcha.replace("captcha/", "").replace(".png", "")#获取图片名
return captcha_end, captcha_data#返回验证码和验证码图片名
def post(captcha_end,captcha_data):#post发包
post_data = {
"username": "admin",
"password": "123456",
"captchaSolution": captcha_end,
"captchaId" : captcha_data
}
end = s.post(url = 'http://spiderbuf.cn/e02/login',headers = header,data = post_data).text#获取发包后的界面
return end
captcha_end,captcha_data = get_captcha(url)
get_index = post(captcha_end,captcha_data)
xpath_data = etree.HTML(get_index)#爬
tr = xpath_data.xpath('//tr')#读tr节点
for td in tr:
blank = ''
td = td.xpath('./td/text()')
for result_data in td:
blank = blank + result_data + ' '
print(blank)
运行一下还是可以请求到了 作为练习的记录吧
0x04
如果有什么想法欢迎加群768493664交流 或者指点一二 感激不尽