基于requests 简单的豆瓣网平台自动打码登录

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&amp;size=s" alt = "captcha" class ="captcha_image" >
    code_id = re.findall('<img id="captcha_image".*?id=(.*?)&amp.*?>', data, re.S)[0]
    print(code_id)
    return code_id

后续登录代码就不列举出来了,需要根据自己的用户名和密码提交

猜你喜欢

转载自blog.csdn.net/weixin_42329277/article/details/84074445