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

时间:2024-02-21 17:23:45

目标

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

分析

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)