(項目)使用接口自動登陸滴滴打碼網站


目標

  使用接口實現自動登陸滴滴打碼。

分析

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)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM