Python无界面爬取登录+验证码

一、准备

    安装requests、BeautifulSoup、pillow、pytesseract库,直接pip install xx就可以。

二、 登录提交测试

1、输入错误账号密码进行模拟登录,通过开发者工具确定登录提交的header 和 表单参数以及验证码对应的请求链接。

可以参考以下链接:https://blog.csdn.net/will4906/article/details/77124615/

2、直接上代码

def get_code():
	# 根据图片获取验证码,可以根据验证码类型选择适合的ImageFilter进行处理
        # 如果是一些等式验证码,可以手动进行输入,还没进行过测试
	i = Image.open('img/valcode.png')
	# filterimg = imgry.filter(ImageFilter.MedianFilter(5))#在每个像素点为中心的5x5区域25个像素点中选择出现次数最多的像素作为新的值
	# filterimg = imgry.filter(ImageFilter.MaxFilter(1))#在每个像素点为中心的5x5区域25个像素点中选择最大的像素作为新的值		
	# filterimg = imgry.filter(ImageFilter.DETAIL)#细节增强
	# filterimg = imgry.filter(ImageFilter.SHARPEN)#锐化

	filterimg = i.convert('L')#图像加强,二值化

	x,y = filterimg.size 

	# 使用白色来填充背景  imgry->filterimg->p
	p = Image.new('RGBA', filterimg.size, (255,255,255))
	p.paste(filterimg, (0, 0, x, y), filterimg)

	# p = p.filter(ImageFilter.CONTOUR) #轮廓滤波
	p = p.filter(ImageFilter.EDGE_ENHANCE_MORE)#深度边缘增强滤波		
	p = p.filter(ImageFilter.SHARPEN)#锐化
	p = p.filter(ImageFilter.DETAIL)#细节增强

	p.save('img/after.png')

	word = None

	newVerify = Image.open('img/after.png')
	text = image_to_string(newVerify)#读取验证码图片上面的文字

	words = text.split()
	word = ''.join(words)
	return word


def get_ltvalue(url,r_session):
	#进行验证码读取和隐藏表单参数的获取
	page = r_session.get(url)
	
	content= page.text
	soup = BeautifulSoup(content, 'lxml')
	lt_value = soup.find('input', {'name': 'lt'}).get('value')
	cookie_dicts = requests.utils.dict_from_cookiejar(page.cookies)

	codeurl = 'https://**/imgcode' #验证码请求url
	valcode = r_session.get(codeurl)
	with open('img/valcode.png', 'wb') as f:
		# 将response的二进制内容写入到文件中
		f.write(valcode.content)

	# code = input('请输入验证码:')
	# code = str(code)

	code = get_code()#自动获取验证码
	return lt_value,cookie_dicts,code


def main(username,password):

	login_url = "https://*****" #登录url,根据header上面的request url确定
	
         header = { 
		"Content-Type": "application/x-www-form-urlencoded",
		"Host": "", #根据你的请求header填入
		"Origin": "",#根据你的请求header填入
		"Connection": "keep-alive",
		"Referer": "",#根据你的请求header填入
		"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
	}

	r_session  = requests.Session() #同一个Session实例发出的所有请求都保持同一个cookies    
        
        while True:
            lt_value,cookie_dicts,code = get_ltvalue(login_url,r_session)
        
       
            login_params = {
			"lt": lt_value,
			"username": username,
			"password": password,
			"verifyCode": code
		}

            r1 = r_session.post(login_url, data=login_params,headers=header,cookies=cookie_dicts)
            soup = BeautifulSoup(r1.text, 'lxml')
	    text = soup.find('div', id='msg') #登录成功退出循环获取验证码
	    if text:
                text = r1.text.encode('utf-8')  #获取登录后的页面
                print(text)
		break


if __name__ == "__main__":
    
    main("user","passwd")

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值