您好,登錄后才能下訂單哦!
這篇文章主要介紹Python中怎么實(shí)現(xiàn)自動(dòng)化刷抖音,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
1.獲取手機(jī)抖音短視頻的截圖
2.調(diào)用百度API識(shí)別人臉
3.對(duì)符合條件的視頻點(diǎn)贊和評(píng)論
獲取抖音視頻的截圖
獲取視頻截屏,在這里用的是adb工具。adb工具即Android Debug Bridge(安卓調(diào)試橋)。是連接Android手機(jī)與PC端的橋梁,通過(guò)adb可以管理、操作模擬器和實(shí)體設(shè)備,如安裝軟件、查看設(shè)備軟硬件參數(shù)、系統(tǒng)升級(jí)、運(yùn)行shell命令等。在這里通過(guò)命令行窗口發(fā)送對(duì)應(yīng)的命令,就可以實(shí)現(xiàn)手機(jī)的截屏。如果沒(méi)有安裝adb工具包,需要先安裝adb工具包。
具體實(shí)現(xiàn)代碼
# 圖片壓縮比例 SIZE_normal = 1.0 SIZE_small = 1.5 SIZE_more_small = 2.0 # adb手機(jī)截圖 def get_screen_shot_img(): # 截圖 os.system("adb shell /system/bin/screencap -p /sdcard/screenshot.jpg") os.system("adb pull /sdcard/screenshot.jpg face.jpg") # 壓縮圖片 img = Image.open("face.jpg").convert('RGB') scale = SIZE_small w, h = img.size img.thumbnail((int(w / scale), int(h / scale))) img.save('face.jpg')
調(diào)用百度API識(shí)別人臉
(1)進(jìn)入百度云的人臉識(shí)別控制臺(tái)
https://console.bce.baidu.com/ai/?_=1528192333418&fromai=1#/ai/face/overview/index
若沒(méi)有百度賬號(hào),可以用手機(jī)號(hào)快速注冊(cè)一個(gè)。
(2)創(chuàng)建人臉識(shí)別應(yīng)用
賬號(hào)登錄成功之后,你需要?jiǎng)?chuàng)建應(yīng)用才能正式調(diào)用百度api,應(yīng)用創(chuàng)建成功后會(huì)獲取到應(yīng)用對(duì)應(yīng)的API Key及Secret Key,用著兩個(gè)參數(shù)進(jìn)行接口調(diào)用操作,及相關(guān)配置。
點(diǎn)擊上圖中的創(chuàng)建應(yīng)用,填寫(xiě)【應(yīng)用名稱(chēng)】和【應(yīng)用描述】,即可創(chuàng)建應(yīng)用(其他選項(xiàng)可以不做操作,使用默認(rèn)值即可)
(3)獲取秘鑰
創(chuàng)建完成后,點(diǎn)擊“返回應(yīng)用列表”進(jìn)行下一步操作。平臺(tái)將會(huì)分配給你此應(yīng)用的相關(guān)憑證:API Key、Secret Key。他將用于在下一步獲取調(diào)用接口所需的Access Token中。
(4)拿到API Key,Secret Key之后,通過(guò)這兩個(gè)參數(shù)獲取調(diào)用接口所需的Access Token
具體實(shí)現(xiàn)代碼
def get_access_token(): # client_id 為官網(wǎng)獲取的AK, client_secret 為官網(wǎng)獲取的SK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官網(wǎng)獲取的AK】' \ '&client_secret=【官網(wǎng)獲取的SK】 ' header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko', "Content-Type": "application/json"} req = request.Request(url=host, headers=header_dict) res = request.urlopen(req) res = res.read() res_json = json.loads(res.decode('utf-8')) return res_json["access_token"]
調(diào)用百度API
''' 調(diào)用百度API,進(jìn)行人臉探測(cè) imgPath:圖片的地址 access_token:開(kāi)發(fā)者token ''' def get_face_info_from_bai_du(img_path, access_token): # 接口請(qǐng)求地址 request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect" # 二進(jìn)制方式打開(kāi)圖片文件 f = open(img_path, 'rb') # 圖片轉(zhuǎn)換為base64 img = base64.b64encode(f.read()) params = {"face_field": "age,beauty,gender", "image": img, "image_type": 'BASE64', "max_face_num": 5} params = urllib.parse.urlencode(params).encode(encoding='utf-8') request_url = request_url + "?access_token=" + access_token # 調(diào)用post請(qǐng)求方法 face_info = get_info_post_json_data(request_url, params) # json字符串轉(zhuǎn)對(duì)象 face_json = json.loads(face_info) print(face_info) if face_json['error_msg'] == 'SUCCESS': # 如果沒(méi)有發(fā)現(xiàn)人像,會(huì)返回空 if face_json['result']['face_num'] == 0: face_dict = {} else: # 把想要的部分提取存入字典中 result = face_json['result']['face_list'][0] gender = result['gender']['type'] age = str(result['age']) beauty = str(result['beauty']) face_dict = {"gender": gender, "age": age, "beauty": beauty} return face_dict
注意此處有坑,說(shuō)說(shuō)我入坑的過(guò)程。申請(qǐng)完ak和sk之后我調(diào)用人臉識(shí)別的api。返回的消息是:{‘error_code': 6, ‘error_msg': ‘No permission to access data'}。我一查官方文檔說(shuō)是沒(méi)有獲取用戶(hù)數(shù)據(jù)的權(quán)限。需要啥權(quán)限呢,難道調(diào)用這個(gè)接口還需要申請(qǐng)權(quán)限?不是有ak和sk嗎?各種百度,無(wú)果。放棄了。晚上繼續(xù)搞,這次從官方文檔入手找原因。無(wú)意看到說(shuō)是api升級(jí)了。從v2升級(jí)到了v3。我申請(qǐng)的ak和sk對(duì)應(yīng)的是v3版的。而我調(diào)用的接口確實(shí)v2版的。具體體現(xiàn)在請(qǐng)求URL的區(qū)別上,所以苦苦找不到原因。從入坑的經(jīng)歷獲取的教訓(xùn)是:一定要仔細(xì)看官方文檔;找不出bug的時(shí)候,就先放一放,回頭再看,就會(huì)茅塞頓開(kāi),一切迎刃而解。
下面給出正常調(diào)用api返回的json數(shù)據(jù)
{ "error_code":0, "error_msg":"SUCCESS", "log_id":304592828857184421, "timestamp":1542885718, "cached":0, "result":{ "face_num":1, "face_list":[ { "face_token":"9ae54ea1941d2b9d8a7e881f3ae39fe1", "location":{ "left":374.5, "top":406.94, "width":140, "height":136, "rotation":30 }, "face_probability":0.99, "angle":{ "yaw":-12, "pitch":10.26, "roll":29.76 }, "age":21, "beauty":53.22, "gender":{ "type":"female", "probability":1 } } ] } }
人臉識(shí)別這塊。是根據(jù)你調(diào)用接口所傳的參數(shù)來(lái)返回你需要的值。傳的參數(shù)越多,返回消息越詳細(xì)。我這里只獲取年齡,性別,顏值這幾個(gè)參數(shù)。同樣v2版的接口和v3版的接口返回的數(shù)據(jù)格式也是有區(qū)別的。
對(duì)符合條件的視頻點(diǎn)贊和評(píng)論
獲取到api返回的數(shù)據(jù)后就是一些判斷。我這里的判斷是:如果識(shí)別到人臉,年齡在18歲以上,顏值在40以上。就點(diǎn)贊+評(píng)論。
具體實(shí)現(xiàn)
''' 將獲得的數(shù)據(jù)進(jìn)行分析 face_dict:人臉識(shí)別后的數(shù)據(jù) ''' def analysis_face(face_dict): # 如果發(fā)現(xiàn)人臉繼續(xù)判斷 if len(face_dict) != 0: # 如果為女生 if face_dict["gender"] == "female": print("性別:女") print("年齡:" + face_dict["age"]) print("顏值:" + face_dict["beauty"]) # 如果顏值在40以上,并且年齡大于18繼續(xù) if float(face_dict["beauty"]) > 40 and float(face_dict["age"]) > 18: # 點(diǎn)贊 commentaries() print("------------------捕獲小姐姐一枚------------------") print("------------------顏值好高哦,已點(diǎn)贊?------------") else: print("顏值不及格,繼續(xù)努力,下一個(gè)") # 如果為男生 else: print("性別:男") print("年齡:" + face_dict["age"]) print("顏值:" + face_dict["beauty"]) # 如果顏值在40以上,并且年齡大于18繼續(xù) if float(face_dict["beauty"]) > 40 and float(face_dict["age"]) > 18: # 點(diǎn)贊 commentaries() print("------------------捕獲小哥哥一枚------------------") print("------------------顏值好高哦,已點(diǎn)贊?------------") else: print("顏值不及格,繼續(xù)努力,下一個(gè)") else: print("沒(méi)有發(fā)現(xiàn)小姐姐和小哥哥,下一個(gè)") # 上滑新視頻 next_video()
怎么實(shí)現(xiàn)點(diǎn)贊和評(píng)論呢?沒(méi)錯(cuò)還是使用adb工具。不過(guò)這里還需要用到一個(gè)Android studio 插件——Android Device Monitor。為什么要用他呢。因?yàn)楫?dāng)我們點(diǎn)贊的時(shí)候,需要知道點(diǎn)贊這個(gè)按鈕在屏幕的具體位置。同理評(píng)論也需要知道評(píng)論輸入框的坐標(biāo)位置。
下面來(lái)看怎么用Android Device Monitor獲取手機(jī)屏幕坐標(biāo)信息。
連接上手機(jī)之后,如上圖4個(gè)步驟。就可以獲取到手機(jī)屏幕任意一點(diǎn)的位置坐標(biāo)。這里只需要輸入大概的位置坐標(biāo)即可。那么這個(gè)插件從哪來(lái)呢。據(jù)說(shuō)Android Studio3.0之前的版本,都自帶這個(gè)插件。而我剛好是3.0之后的版本,所以還需要另外做些工作。具體使用方式如下:
在android-sdk/tools/目錄的命令行中輸入以下內(nèi)容:monitor。即進(jìn)入CMD窗口,cd到當(dāng)時(shí)安裝Android-sdk的目錄,再繼續(xù)cd到tools目錄下,然后輸入命令monitor,這是期待已久的Android Device Monitor就會(huì)出現(xiàn)。因?yàn)槊靠钍謾C(jī)的屏幕尺寸可能不一樣。所以下面的參數(shù)僅是我手機(jī)測(cè)量得到的坐標(biāo)。
下面就是具體點(diǎn)贊評(píng)論的實(shí)現(xiàn)
# 點(diǎn)贊評(píng)論 def commentaries(): os.system("adb shell input tap 1000 1200") # 點(diǎn)贊 time.sleep(0.01) os.system("adb shell input tap 1000 1400") # 點(diǎn)擊評(píng)論按鈕 time.sleep(0.05) os.system("adb shell input tap 50 2000") # 獲取EditText輸入框焦點(diǎn) os.system("adb shell am broadcast -a ADB_INPUT_TEXT --es msg '真好真好'") # 評(píng)論 os.system("adb shell input tap 1000 1860") # 發(fā)送評(píng)論 time.sleep(1) os.system("adb shell input tap 500 100") # 退回主界面
這里還有一點(diǎn)需要注意:adb shell input text 不支持中文輸入。只能輸入'hello world'這樣的英文,輸入英文前也是需要將鍵盤(pán)切換到英文輸入模式下的。繼續(xù)百度,如何實(shí)現(xiàn)中文輸入,發(fā)現(xiàn)另一個(gè)神器—ADBKeyBoard.apk,一款老外寫(xiě)的輸入法。完美解決不能輸入中文的問(wèn)題。源碼地址:https://github.com/senzhk/ADBKeyBoard。安裝這個(gè)app。并將默認(rèn)輸入法切換成ADBKeyBoard。
最后提醒大家,抖音會(huì)限制一個(gè)賬號(hào)在一段時(shí)間內(nèi)的評(píng)論次數(shù),長(zhǎng)時(shí)間高頻率的評(píng)論抖音就會(huì)暫時(shí)關(guān)掉你的評(píng)論權(quán)限。
以上是“Python中怎么實(shí)現(xiàn)自動(dòng)化刷抖音”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。