模拟登录
(1)通过代码首先发送post请求,然后再发送get请求(登录后页面)
(2)先发送get,然后再发送post,在发送get(登录后的页面)
(3)先发送get,然后再发送post,在发送get,在get(登陆后页面)
验证码解决
(1)手动输入
(2)自动识别
软件识别,tesseract,OCR:光学识别,识别率的问题 80-90%
指令识别:tesseract 要识别的图片 文件名字
机器学习,
代码识别:代码识别之前可以首先将图片处理一下
pip install pytesseract
pip install pillow验证码解决
(1)手动输入
(2)自动识别
软件识别,tesseract,OCR:光学识别,识别率的问题 80-90%
指令识别:tesseract 要识别的图片 文件名字
机器学习,
代码识别:代码识别之前可以首先将图片处理一下
pip install pytesseract
pip install pillow
自动识别验证码
极验验证码
打码平台:为了解决机器识别不了稍微复杂的图片验证码,你将图片通过http的上传方式上传给打码平台,打码平台旁边坐着好多人,识别出来将结果给你 云打码平台
import requests
from bs4 import BeautifulSoup
import urllib.request
import time
import pytesseract
from PIL import Image
from PIL import ImageEnhance
def yanzheng(filepath):
'''
给一个图片路径,识别出来结果并且返回
'''
img = Image.open(filepath)
# 转化为灰度图片
img = img.convert('L')
# 二值化处理
threshold = 140
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out = img.point(table, '1')
ret = pytesseract.image_to_string(img)
return ret
def main():
# 创建一个会话
s = requests.Session()
i = 1
while True:
login_url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
login_r = s.get(url=login_url, headers=headers)
# 解析这个网页,获取得到验证码图片的地址
soup = BeautifulSoup(login_r.text, 'lxml')
img_src = 'https://so.gushiwen.org' + soup.find('img', id='imgCode')['src']
# 将图片保存到本地
img_r = s.get(url=img_src, headers=headers)
with open('code.png', 'wb') as fp:
fp.write(img_r.content)
# 获取得到表单里面的隐藏数据
views = soup.find('input', id='__VIEWSTATE')['value']
viewg = soup.find('input', id='__VIEWSTATEGENERATOR')['value']
code = yanzheng('code.png')
# 模拟发送post请求
post_url = 'https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx'
formdata = {
'__VIEWSTATE': views,
'__VIEWSTATEGENERATOR': viewg,
'from': 'http://so.gushiwen.org/user/collect.aspx',
'email': '1090509990@qq.com',
'pwd': '123456',
'code': code,
'denglu': '登录',
}
post_r = s.post(url=post_url, headers=headers, data=formdata)
# print(post_r.text)
# 判断有没有登录成功,如果失败,上面的操作接着做,如果成功,循环就可以退出
if '退出登录' in post_r.text:
print('第--%s--次登录成功--^_^' % i)
break
print('第--%s--次登录失败--o(╯□╰)o' % i)
i += 1
time.sleep(2)
if __name__ == '__main__':
main()
.39.png