• (项目)使用接口自动登陆滴滴打码网站


    目标

      使用接口实现自动登陆滴滴打码。

    分析

    1 打开滴滴打码登陆网站:http://www.ddocr.com/user/login.html 。

    2 查看接口

     1)发现有一个get型接口:login.html  如下图所示。这个接口用于我们请求登陆界面。

      2)还发现了一个get型接口:code.html  如下图所示。这个接口用来请求登陆界面显示的验证码。

    3 输入账号、密码和验证码后点击登陆,进入网站首页。

     1)进入网站首页后,我们发现用于获取登陆界面的get型接口变为post型:login.jsonp  如下图所示。

        这个post接口还有 Form Data 这一表单数据,包括我们登陆的账号、密码和验证码。因此这个变化后的接口是用来请求登陆滴滴打码的。

       

       

     2)进入网站首页后,我们发现还多出了一个接口:index.html ,多出的这个接口用来请求首页。如果没有这个请求,我们就看不到首页。

    思路

      1 发送一个get请求,用于获取登陆界面。url为登陆界面的url:http://www.ddocr.com/user/login.html 

      2 发送一个get请求,用于获取第1步登陆界面的验证码,把登陆界面的验证码下载到本地,然后用超级鹰对下载的图片进行识别。

      3 发送一个post请求,用于登陆滴滴打码网,请求应该包括:账号、密码以及超级鹰识别验证码的结果。

      4 发送一个get请求,用来请求滴滴打码网的首页。

      注意:

      1)前三个步骤的验证码是同一个验证码。为了保证它们三步的验证码相同,我们应该使用requests库的Session方法,这样每次发送请求的cookie就都相同了。第4步请求首页的cookie也应该和前三次相同。

     1 request = requests.Session()
     2 # 第一次请求
     3 request1 = request.get()
     4 # 第二次请求
     5 request2 = request.get()
     6 # 第三次请求
     7 request3 = request.post()
     8 # 第四次请求
     9 request4 = request.get()
    10 
    11 # 以上四次请求的cookie都相同。

      2)每次发送请求时,都应该加上请求头,以免请求失败。

      3)当我们运行后,得到的代码与滴滴打码首页的源代码是一样的,那么就证明我们登陆成功了。

     1 '''2020-7-1 by 微风'''
     2 
     3 import requests
     4 from hashlib import md5
     5 
     6 s = requests.Session()
     7 #第一次请求,用于请求登陆界面。
     8 s.get('http://www.ddocr.com/user/login.html')
     9 
    10 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
    11 
    12 #获取验证码
    13 yanzhengma_url = 'http://www.ddocr.com/validate/code.html?c=0.26932298512812447?c=0.5569207243804184'
    14 #第二次请求,用于请求登陆界面的验证码。
    15 yanzhengma = s.get(yanzhengma_url,headers=headers)
    16 
    17 #将验证码保存到本地
    18 with open('yanzhengma.jpg','wb') as file:
    19     file.write(yanzhengma.content)
    20 
    21 #使用超级鹰识别下载到本地的验证码
    22 class Chaojiying_Client(object):
    23 
    24     def __init__(self, username, password, soft_id):
    25         self.username = username
    26         self.password = md5(password.encode('utf8')).hexdigest()
    27         self.soft_id = soft_id
    28         self.base_params = {
    29             'user': self.username,
    30             'pass2': self.password,
    31             'softid': self.soft_id,
    32         }
    33         self.headers = {
    34             'Connection': 'Keep-Alive',
    35             'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
    36         }
    37 
    38     def PostPic(self, im, codetype):
    39         """
    40         im: 图片字节
    41         codetype: 题目类型 参考 http://www.chaojiying.com/price.html
    42         """
    43         params = {
    44             'codetype': codetype,
    45         }
    46         params.update(self.base_params)
    47         files = {'userfile': ('ccc.jpg', im)}
    48         r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
    49         return r.json()
    50 
    51     def ReportError(self, im_id):
    52         """
    53         im_id:报错题目的图片ID
    54         """
    55         params = {
    56             'id': im_id,
    57         }
    58         params.update(self.base_params)
    59         r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
    60         return r.json()
    61 chaojiying = Chaojiying_Client('超级鹰账号', '超级鹰密码', '超级鹰软件ID')
    62 im = open('yanzhengma.jpg', 'rb').read()
    63 
    64 
    65 #第三次请求,用于请求登陆,登陆时需要携带登陆信息。chaojiying.PostPic(im, 1004)['pic_str']是超级鹰识别下载到本地的验证码的结果。
    66 Form_Data = {'account': '754944838@qq.com','password': '346980801','verity':chaojiying.PostPic(im, 1004)['pic_str']} 
    67 login = s.post('http://www.ddocr.com/user/login.html',data=Form_Data,headers=headers)
    68 
    69 #第四次请求,用于请求首页
    70 index = s.get('http://www.ddocr.com/user/index.html',headers=headers)
    71 print(index.text)

      

  • 相关阅读:
    AS中Loading 的加载
    视频类的相关加载
    2012、10、05 听课笔记
    2012、09、27 听课笔记
    小程序的编写—2
    小程序的编写—1
    2012、9、28 听课笔记
    GCD
    CFHTTP
    获取当前时间字符串
  • 原文地址:https://www.cnblogs.com/weifeng1998/p/13263080.html
Copyright © 2020-2023  润新知