日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python:尝试对知乎网验证码进行处理

發布時間:2023/11/28 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python:尝试对知乎网验证码进行处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

許多流行的內容管理系統即使加了驗證碼模塊,其眾所周知的注冊頁面也經常會遭到網絡 機器人的垃圾注冊。

那么,這些網絡機器人究,竟是怎么做的呢?既然我們已經,可以成功地識別出保存在電腦上 的驗證碼了,那么如何才能實現一個全能的網絡機器人呢?

大多數網站生成的驗證碼圖片都具有以下屬性。

  • 它們是服務器端的程序動態生成的圖片。驗證碼圖片的 src 屬性可能和普通圖片不太一 樣,比如?<img src="WebForm.aspx?id=8AP85CQKE9TJ">,但是可以和其他圖片一樣進行 下載和處理。
  • 圖片的答案存儲在服務器端的數據庫里。
  • 很多驗證碼都有時間限制,如果你太長時間沒解決就會失效。
  • 常用的處理方法就是,首先把驗證碼圖片下載到硬盤里,清理干凈,然后用 Tesseract 處理 圖片,最后返回符合網站要求的識別結果。
#!/usr/bin/env python
# -*- coding:utf-8 -*-import requests
import time
import pytesseract
from PIL import Image
from bs4 import BeautifulSoupdef captcha(data):with open('captcha.jpg','wb') as fp:fp.write(data)time.sleep(1)image = Image.open("captcha.jpg")text = pytesseract.image_to_string(image)print "機器識別后的驗證碼為:" + textcommand = raw_input("請輸入Y表示同意使用,按其他鍵自行重新輸入:")if (command == "Y" or command == "y"):return textelse:return raw_input('輸入驗證碼:')def zhihuLogin(username,password):# 構建一個保存Cookie值的session對象sessiona = requests.Session()headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'}# 先獲取頁面信息,找到需要POST的數據(并且已記錄當前頁面的Cookie)html = sessiona.get('https://www.zhihu.com/#signin', headers=headers).content# 找到 name 屬性值為 _xsrf 的input標簽,取出value里的值_xsrf = BeautifulSoup(html ,'lxml').find('input', attrs={'name':'_xsrf'}).get('value')# 取出驗證碼,r后面的值是Unix時間戳,time.time()captcha_url = 'https://www.zhihu.com/captcha.gif?r=%d&type=login' % (time.time() * 1000)response = sessiona.get(captcha_url, headers = headers)data = {"_xsrf":_xsrf,"email":username,"password":password,"remember_me":True,"captcha": captcha(response.content)}response = sessiona.post('https://www.zhihu.com/login/email', data = data, headers=headers)print response.textresponse = sessiona.get('https://www.zhihu.com/people/maozhaojun/activities', headers=headers)print response.textif __name__ == "__main__":#username = raw_input("username")#password = raw_input("password")zhihuLogin('xxxx@qq.com','ALAxxxxIME')

值得注意的是,有兩種異常情況會導致這個程序運行失敗。第一種情況是,如果 Tesseract 從驗證碼圖片中識別的結果不是四個字符(因為訓練樣本中驗證碼的所有有效答案都必須 是四個字符),結果不會被提交,程序失敗。第二種情況是雖然識別的結果是四個字符, 被提交到了表單,但是服務器對結果不認可,程序仍然失敗。

在實際運行過程中,第一種 情況發生的可能性大約為 50%,發生時程序不會向表單提交,程序直接結束并提示驗證碼 識別錯誤。第二種異常情況發生的概率約為 20%,四個字符都對的概率約是 30%(每個字 母的識別正確率大約是 80%,如果是五個字符都識別,正確的總概率是 32.8%)。

總結

以上是生活随笔為你收集整理的Python:尝试对知乎网验证码进行处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。