通過抓包發現百度雲刪除文件接口https://pan.baidu.com/api/filemanager,本文主要試圖通過該接口來封裝一個刪除百度網盤文件的api接口。
瀏覽器請求數據包信息如下:
瀏覽器響應信息如下:
上述響應信息說明文件刪除成功
代碼如下:
1 #! /usr/bin/python3 2 # -*- coding: UTF-8 -*- 3 4 import time, re, requests, json 5 from selenium.webdriver import Firefox, Chrome 6 from selenium.webdriver.common.by import By 7 from selenium.webdriver.common.keys import Keys 8 from selenium.webdriver.firefox.options import Options 9 from selenium.webdriver.support import expected_conditions as expected 10 from selenium.webdriver.support.wait import WebDriverWait 11 12 def baiduyun_test (): 13 print (time.ctime ()) 14 browser = Chrome() 15 try: 16 browser.get('https://pan.baidu.com/') 17 time.sleep (3) 18 #點擊"賬號密碼登陸" 19 elem = browser.find_element_by_xpath('//p[@class="tang-pass-footerBarULogin pass-link"]') 20 elem.click () 21 print ('點擊"賬號密碼登陸"') 22 #輸入賬號 23 elem = browser.find_element_by_id('TANGRAM__PSP_4__userName') 24 elem.clear () 25 elem.send_keys('username') 26 print ('輸入賬號') 27 #time.sleep (3) 28 #輸入密碼 29 elem = browser.find_element_by_id('TANGRAM__PSP_4__password') 30 elem.clear () 31 elem.send_keys('password') 32 print ('輸入密碼') 33 time.sleep (1) 34 #點擊登陸 35 elem = browser.find_element_by_id('TANGRAM__PSP_4__submit') 36 elem.click () 37 print ('點擊登陸') 38 time.sleep (3) 39 #獲取bdstoken 40 pattern = r'"bdstoken":"(.*?)"' 41 while True: 42 try: 43 page_html = browser.page_source 44 bdstoken = re.findall (pattern, page_html) [0] 45 break 46 except: 47 print ('等待驗證~~~') 48 time.sleep (3) 49 print ('bdstoken :', bdstoken) 50 logid = 'MTUzNDM4NDk3MjYzNDAuNTAyODg4NzM4MTQyNDE0Nw==' 51 url = 'https://pan.baidu.com/api/filemanager?opera=delete&async=2&onnest=fail&channel=chunlei&web=1&app_id=250528&bdstoken=' + bdstoken + '&logid=' + logid + '&clienttype=0' 52 print ('url :', url) 53 #獲取cookies 54 Cookie = '' 55 for item in browser.get_cookies (): 56 if item ['name'] == 'BDUSS' or item ['name'] == 'STOKEN': 57 Cookie += item ['name'] + '=' + item ['value'] + ';' 58 Cookie.rstrip (';') 59 #print ('Cookie :', Cookie) 60 headers = { 61 "Accept": "application/json, text/javascript, */*; q=0.01", 62 "Accept-Encoding": "gzip, deflate, br", 63 "Accept-Language": "zh-CN,zh;q=0.9", 64 "Connection": "keep-alive", 65 "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 66 "Cookie": Cookie, 67 "Host": "pan.baidu.com", 68 "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", 69 #"X-Requested-With": "XMLHttpRequest" 70 } 71 data = { 72 "filelist" : ["/test.jpg"] 73 } 74 response = requests.post (url = url, data = data, headers = headers) 75 print (response.content) 76 except BaseException as e: 77 print (e) 78 finally: 79 browser.quit () 80 print (time.ctime ())
代碼介紹:
首先通過使用Python3的selenium模塊進行模擬百度雲登錄來獲取刪除百度雲文件接口中所需的各項參數,主要包含bdstoken、BDUSS和STOKEN,bdstoken包含在頁面HTML代碼中,BDUSS和STOKEN則包含在Cookie中;
然后通過上述各項參數構造POST請求,完全模擬瀏覽器刪除文件操作。
目前遇到的問題:但即使我構造了跟瀏覽器一模一樣的請求頭和cookie等信息,仍然會報錯
報錯信息如下:
{"errno":2,"info":[],"request_id":5310516426993481489}
Google得知為參數錯誤(參考鏈接:[Callback] 百度網盤errno錯誤代碼匯總對照表)
參考鏈接:如何清除百度網盤重復文件
08.18更新
在Tychxn的幫助下,成功發現問題並解決,具體過程如下
在此,向Tychxn致謝,其GitHub地址為https://github.com/tychxn。