失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > scrapy+selenium+超级鹰验证码识别登录古诗文网

scrapy+selenium+超级鹰验证码识别登录古诗文网

时间:2020-10-25 18:52:33

相关推荐

scrapy+selenium+超级鹰验证码识别登录古诗文网

文章目录

一、改写超级鹰api接口二、用scrapy+selenium+超级鹰登录古诗文网三、总结

一、改写超级鹰api接口

代码如下,main中注释的部分为原部分

#!/usr/bin/env python# coding:utf-8import requestsfrom hashlib import md5class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernamepassword = password.encode('utf8')self.password = md5(password).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def PostPic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 /price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('/Upload/Processing.php', data=params, files=files, headers=self.headers)return r.json()def ReportError(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('/Upload/ReportError.php', data=params, headers=self.headers)return r.json()# if __name__ == '__main__':# chaojiying = Chaojiying_Client('用户名', '密码', '914982')#用户中心>>软件ID 生成一个替换 96001# im = open('a.jpg', 'rb').read()#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//# print (chaojiying.PostPic(im, 1902))#1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()def get_captcha(image_name):chaojiying = Chaojiying_Client('用户名', '密码', '914982')#用户中心>>软件ID 生成一个替换 96001im = open(image_name, 'rb').read()return chaojiying.PostPic(im, 8001)['pic_str']

这样引用chaojiying.py这个文件,调用get_captcha()方法,传入图片名称就可以返回验证码数据了。

二、用scrapy+selenium+超级鹰登录古诗文网

分为三个步骤:

selenium登录网址,并且将整个网页截屏获取验证码图片在网页中的x,y坐标位置,打开整页截屏的图片,通过该坐标截取验证码引入超级鹰的api,将图片名称传给get_captcha()方法,返回验证码信息

代码如下:

import scrapyimport timefrom selenium import webdriverfrom PIL import Imageimport chaojiyingclass LoginSpider(scrapy.Spider):name = 'login'allowed_domains = ['']start_urls = ['/user/login.aspx']personal = '/user/collect.aspx'def start_requests(self):driver = webdriver.Chrome()driver.get(self.start_urls[0])driver.save_screenshot('gushiwen.png')imgElement = driver.find_element_by_id('imgCode')left = imgElement.location['x'] # 区块截图左上角在网页中的x坐标top = imgElement.location['y'] # 区块截图左上角在网页中的y坐标right = left + imgElement.size['width'] # 区块截图右下角在网页中的x坐标bottom = top + imgElement.size['height'] # 区块截图右下角在网页中的y坐标box = (left, top, right, bottom)screencut = Image.open('gushiwen.png')screencut.crop(box).save("截图后.png")# =========手动识别验证码===========#code = input("请输入验证码: ")# =========自动识别验证码===========code = chaojiying.get_captcha('截图后.png')driver.find_element_by_id('email').send_keys('你的用户名')time.sleep(1)driver.find_element_by_id('pwd').send_keys('你的密码')time.sleep(1)driver.find_element_by_id('code').send_keys(code)time.sleep(1)driver.find_element_by_id('denglu').click()time.sleep(1)cookies_dict = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}driver.close()yield scrapy.Request(url=self.personal,cookies=cookies_dict,callback=self.parse)def parse(self, response):print('这是在收藏中:',response.url)

用selenium登录获取的cookeis继续访问我的收藏,验证是否登录成功

可以看到,这里已经跳转到我的收藏中了,代表登录成功


三、总结

以上便是所有内容,有帮助的小伙伴可以点个赞,谢谢

如果觉得《scrapy+selenium+超级鹰验证码识别登录古诗文网》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。