Python+Request库+第三方平台实现验证码识别示例
生活随笔
收集整理的這篇文章主要介紹了
Python+Request库+第三方平台实现验证码识别示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、登錄時經常的出現驗證碼,此次結合Python+Request+第三方驗證碼識別平臺(超級鷹識別平臺)
2、首先到超級鷹平臺下載對應語言的識別碼封裝,超級鷹平臺:http://www.chaojiying.com/price.html
3、使用超級鷹平臺需進行注冊,購買1元,應該有1000次積分,再生產對應軟件ID
4、超級鷹下載Python語言進行Demo示例,代碼如下(命名為ClassCode.py):
import requests
from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id,
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
}
def PostPic(self, im, codetype):
"""
im: 圖片字節
codetype: 題目類型 參考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id:報錯題目的圖片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json()
5、下面使用ClassCode.py模塊中的代碼,對人人網實現驗證碼登錄,此時示例分別使用Cookie和Session進行演示
import requests
from .ClassCode import Chaojiying_Client (導入ClassCode.py 模塊)
from lxml import etree (需安裝:pip3 install lxml)
# 對驗證碼圖片進行抓捕及識別
url = 'http://www.renren.com/SysHome.do'
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
try:
code_img_src = tree.xpath('//*[@id="verifyPic_login"]/@src')[0]
code_img_data = requests.get(url=code_img_src, headers=headers).content
with open('./code_img_data.jpg', 'wb') as fp:
fp.write(code_img_data)
except Exception as msg:
print('元素不存在')
# 使用超級鷹平臺實現驗證碼識別
chaojiying = Chaojiying_Client('超級鷹登錄賬號', '超級鷹登錄密碼', '根據驗證碼類型')
with open('code_img_data.jpg', 'rb') as fp:
img = fp.read()
result = chaojiying.PostPic(img, 1005)['pic_str']
print(result)
################################################
使用Cookie進行登錄
################################################
# 使用Post發送登錄請求 -- 使用Cookie進行登錄
def login_url():
login_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2021212242112'
data = {
"email": "人人網登錄賬號",
"password": "人人網登錄密碼",
"icode": result,
"origURL": "http://www.renren.com/home",
"domain": "renren.com",
"key_id": 1,
"captcha_type": "web_login",
"f":""
}
response = requests.post(url=login_url,headers=headers,data=data)
print(response.status_code)
login_page_text = response.text
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(login_page_text)
return response.cookies
def Profile():
pro_url = 'http://www.renren.com/969120248/profile'
pr_respose_text = requests.get(url=pro_url,headers=headers,cookies=login_url()).text
with open('profile.html','w',encoding='utf-8') as fp:
fp.write(pr_respose_text)
Profile()
################################################
使用Session進行登錄
################################################
# 使用Post發送登錄請求 -- 使用Session進行登錄
# 創建session對象
session = requests.Session()
def login_url_Se():
login_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2021212242112'
data = {
"email": "人人網登錄賬號",
"password": "人人網登錄密碼",
"icode": result,
"origURL": "http://www.renren.com/home",
"domain": "renren.com",
"key_id": 1,
"captcha_type": "web_login",
"f":""
}
response = session.post(url=login_url,headers=headers,data=data)
print(response.status_code)
login_page_text = response.text
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(login_page_text)
return response.cookies
def Profile_Se():
pro_url = 'http://www.renren.com/969120248/profile'
pr_respose_text = session.get(url=pro_url,headers=headers,cookies=login_url_Se()).text
with open('profile_New.html','w',encoding='utf-8') as fp:
fp.write(pr_respose_text)
Profile_Se()
總結
以上是生活随笔為你收集整理的Python+Request库+第三方平台实现验证码识别示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏投放中的-LTV概念与价值
- 下一篇: 系统迁移的注意事项