python 自动识别验证码登录相关库安装

模拟自动登录古诗文网站 https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx

1.拷贝下列源码到c盘,命名成**.py
2.根据此链接https://so.gushiwen.org/RandCode.ashx,网页刷新会生成动态验证码,保存并重命名code.png,并同样放到c盘目录下
3.运行python文件,会生成一个gushi.html文件
4. 直接打开gushi.html ,看看是否登录成功
测试下列,有百分之70左右的概率是能成功登录的

相关库:
下载最新的tesseract:
https://digi.bib.uni-mannheim.de/tesseract/
pip install pytesseract
pip install pillow
安装完后,找到Anaconda3\Lib\site-packages\pytesseract\pytesseract.py
把 tesseract_cmd设定成指定安装的路径:
tesseract_cmd = r’C:\Program Files\Tesseract-OCR\tesseract.exe’

环境变量:
在这里插入图片描述
python 自动识别验证码登录相关库安装_第1张图片
因为我的python文件是安装到D盘: D:\ProgramData\Anaconda3 ,而tesseract是安装到c盘。所以还需要 在C盘,新建一个安装python的同级目录 ,新建下列目录: C:\ProgramData\Anaconda3,然后把C:\ProgramData\Anaconda3\tessdata整个目录拷贝到C:\ProgramData\Anaconda3\tessdata

import requests
from bs4 import BeautifulSoup
import pytesseract
from PIL import Image

headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763’
}

def download_code(s):
url = ‘https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx’
r = s.get(url=url,headers=headers)
soup = BeautifulSoup(r.text,‘lxml’)
#得到图片链接
image_src = ‘https://so.gushiwen.org’ + soup.find(‘img’,attrs={‘id’:‘imgCode’})[‘src’]
print(image_src)
#通过会话请求保存图片信息
r_image=s.get(image_src,headers=headers)
with open(‘code.png’,‘wb’)as fp:
fp.write(r_image.content)
#获取下列两个字段值,用于填充formdata
__VIEWSTATE = soup.find(‘input’,id=’__VIEWSTATE’)[‘value’]
__VIEWSTATEGENERATOR = soup.find(‘input’,id=’__VIEWSTATEGENERATOR’)[‘value’]
return __VIEWSTATE,__VIEWSTATEGENERATOR

def Image_recognition():

'''
#图片识别验证码 
'''
im=Image.open(r'C:\code.png')

#转化为灰度图片
im = im.convert('L')

threshold = 140
table =[]
for i in range(256):
	if i < threshold:
		table.append(0)
	else:
		table.append(1)
out = im.point(table,'1')

im =im.convert('RGB')

# print(pytesseract.image_to_string(im))
return pytesseract.image_to_string(im)

def login(view,viewg,s):
post_url = ‘https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx’
#提示用户输入验证码
#code = input(‘请输入验证码:’)
#图片识别验证码
code = Image_recognition()
print(‘code:%s’%code)

formdata = {
	'__VIEWSTATE': view,
	'__VIEWSTATEGENERATOR': viewg,
	'from': 'http://so.gushiwen.org/user/collect.aspx',
	'email': '******@qq.com',
	'pwd': '******',
	'code': code,
	'denglu': '登录',
}
r = s.post(url=post_url,headers=headers,data=formdata)
with open('gushi.html','w',encoding='utf8')as fp:
	fp.write(r.text)

def main():
#和cookie相关,会话保存cookie信息
s = requests.session()
view, viewg = download_code(s)
login(view,viewg, s)

if name == ‘main’:
main()

请参考下列链接,每次刷新网页都会生成一个验证码信息,然后保存并命名成code.png
https://so.gushiwen.org/RandCode.ashx

安装tesserocr:
1 .打开链接https://github.com/simonflueckiger/tesserocr-windows_build/releases,然后下载对应的tesserocr版本,由于我本地是python3.7,所以下载对应的tesserocr-2.4.0-cp37-cp37m-win_amd64.whl
2. 把该whl文件放到D:\ProgramData\Anaconda3\Scripts目录下
3. 然后在cmd命令行中 切换到该目录执行tesserocr-2.4.0-cp37-cp37m-win_amd64.whl ,为防止其他问题产生,最好用管理员身份打开cmd窗口。
执行完成后,在cmd命令窗口,输入python ,然后import tesserocr ,如果没提示错误,证明安装正确

你可能感兴趣的:(python,学习)