此次是我第一次模拟登入,目标站点是知乎。
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我将cookies删除掉果然就有需要验证码了:

参考了大多数的意见,可以模拟登入移动端,验证码形式是我们常见的字母数字组合,避开这个点击倒立的验证码形式,然后我就在移动端抓包了,可以拿到验证码图片的包,我们可以请求这个URL拿到每次的验证码:

这个URL的结构是:https://www.zhihu.com/captcha.gif?r=xxx&type=login

搜索”

def get_xsrf():
url='https://www.zhihu.com/signin?next=/'
html=session.get(url=url,headers=headers).text
pattern=re.compile('.*?<input type="hidden" name="_xsrf" value="(.*?)"/>', re.S)
_xsrf=re.search(pattern,html).group(1)
if _xsrf:
print('_xsrf获取成功:'+ _xsrf)
return _xsrf
else:
print('_xsrf获取失败')

对于captcha,就是验证码了,在刚开始的时候也提到了,可以请求相应的URL,拿到每次所需的验证码,人工来识别验证码的好处就是准确率高,这里我尝试使用了,人工识别的方法:
验证码图片会下载至项目所在的文件夹,打开图片,输入验证码即可

def get_captcha():
t=int(time.time()*1000)
url='https://www.zhihu.com/captcha.gif?r='+str(t)+'&type=login'
content=session.get(url=url,headers=headers).content
with open('captcha.jpg','wb') as f:
f.write(content)
im=Image.open('captcha.jpg')
im.show()
time.sleep(5)
im.close()
return input('请输入验证码:')

后面我又尝试使用OCR(Optical Character Recogintion,光学字符识别),所用到的包是pytesseract,看能不能够自动识别,但是显然效果是很差的,在此也记录一下:

def get_captcha():
t=int(time.time()*1000)
url='https://www.zhihu.com/captcha.gif?r='+str(t)+'&type=login'
content=session.get(url=url,headers=headers).content
with open('captcha.jpg','wb') as f:
f.write(content)
im=Image.open('captcha.jpg') #把彩色图像转化成灰度图像
gray=im.convert('L')
gray.show()
threshold=200 #二值化处理
table=[]
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out=gray.point(table,'1')
out.show()
out.save('captcha_thresholded.jpg')
th=Image.open('captcha_thresholded.jpg') #使用Tesseract进行图片识别
print(pytesseract.image_to_string(th))
return pytesseract.image_to_string(th)

试了几次,OCR识别的结果都是有问题的,结果是这样的:

更多相关文章

  1. 【Python】python3实现网页爬虫下载图片
  2. python的PIL绘制多行文本的图像。
  3. 铯:使用自己的OpenStreetMap服务器。:“未能获得图像块”错误
  4. JDBC_mysql---防sql注入,存储图片
  5. 请问图片存到MySQL服务器中的时候如何操作?
  6. 如何将图像加载到PictureBox;基于存储在DataBase中的图像位置
  7. asp.net按路径把图片上传到sql数据库
  8. PostgreSQL操纵大对象(图片等)
  9. 使用进度条延迟加载图像会使图像在显示时发生损坏

随机推荐

  1. 使用HTML5 canvas做地图(3)图片加载平移放
  2. html——ul、li导航栏居中的两种办法
  3. 如何使用CSS精灵重复背景图像?
  4. 前端html数组去重的方法
  5. 多文件拖拽上传以及利用Jquery替代HTML5
  6. html5 地理位置定位的时候,想用enableHigh
  7. HTML5小试 双人贪吃蛇
  8. html高德地图ip定位之后拖动自定义定位地
  9. knitr html输出中的字符串太长
  10. 将div放在float下面:left divs