1.对携带验证码页面进行获取
2.解析下载到本地(有的网站并不是img格式不能直接下载)要解析
案例基于 打码平台 www.yundama.com
获取页面上的图片并保存到本地
import requests
import re
from lxml import etree # 利用xpath解析
def get_img(img_file_name):
url = 'https://www.douban.com/accounts/login?source=movie'
data = requests.get(url=url, headers=headers).text
# 将页面数据中验证码解析,验证码下载到本地
tree = etree.HTML(data)
# Xpath表达式 定位到该标签返回列表取第一个[0]取到图片url
codeImg_url = tree.xpath('//*[@id="captcha_image"]/@src')[0] # 如果没有验证码就会报错下标出错
# 对图片请求,content取图片二进制数据值
code_img = requests.get(url=codeImg_url, headers=headers).content
# 保存目录
with open('./%s' % img_file_name, 'wb') as f:
f.write(code_img)
return data # 返回页面数据,便于获取验证码id
三方打码平台获取验证码
from yunDaMa import YDMHttp # 导入下载的模块
def get_code(img):
"""三方平台获取验证码"""
dm = YDMHttp(
username='wkunzhi',
password='901130',
appid=6190,
appkey='d2d65c13c4e6870ba9d4e4a71e39bf95',
)
print('余额: %s' % dm.balance())
filename = img
# 验证码类型,查询http://www.yundama.com/price.html
codetype = 5000
# 超时时间,秒
timeout = 20
# 开始识别
cid, result = dm.decode(filename, codetype, timeout)
print('验证码:', result)
return result
img_file = 'code.png'
name = '[email protected]'
pwd = 'xxxxx'
login(name, pwd)
通过查看页面得知 登录时候还要传一个码id,所以要获取后一起提交
def get_codeId(data):
# < img id = "captcha_image" src = "https://www.douban.com/misc/captcha?id=0IwEZZYmlvrgPJuVu5mjSXUP:en&size=s" alt = "captcha" class ="captcha_image" >
code_id = re.findall('<img id="captcha_image".*?id=(.*?)&.*?>', data, re.S)[0]
print(code_id)
return code_id