【作者: 0han 未經(jīng)授權(quán)請(qǐng)勿轉(zhuǎn)載】
Python批量注冊(cè)instagram賬戶朗徊,利用了ins在用戶注冊(cè)時(shí)不驗(yàn)證郵箱的漏洞傻挂,現(xiàn)已成功實(shí)現(xiàn)自動(dòng)注冊(cè),同時(shí)遇到的問題是ip代理的不可用,導(dǎo)致注冊(cè)超過10個(gè)以后被ins要求添加手機(jī)號(hào)平窘,此文更改于2016年的項(xiàng)目,2017年8月重新按照面對(duì)對(duì)象編程重寫了腳本凳怨,源代碼見文底github瑰艘,遇到的問題見下,有解決辦法的朋友請(qǐng)?jiān)u論區(qū)告知肤舞,感激不盡紫新。
環(huán)境:Python3.x
依賴的第三方庫(kù): requests, BeautifulSoup
依賴的庫(kù): import requests,re,json,time,os,os.path,sys
遇到的問題:
- requests.get(url,proxies=ip)#使用代理時(shí)李剖,發(fā)現(xiàn)requests的代理并無用處芒率,由于獲取代理的輪子是自己寫的,專門做了驗(yàn)證篙顺,確實(shí)無法實(shí)現(xiàn)代理偶芍,這也導(dǎo)致了ins封鎖我的ip注冊(cè)數(shù)
- 我還寫了一個(gè)下載頭像用的庫(kù)(下面有詳解)充择,但是在提交頭像到ins時(shí)沒有成功,不太清楚怎么處理匪蟀。
00x01 ins注冊(cè)流程
Instagram的注冊(cè)頁(yè):
很顯然提交四個(gè)數(shù)據(jù)椎麦,email, username, password, full name. 其中email, username不能和別的用戶重復(fù),first name作為顯示的nickname材彪,full name可以隨便寫观挎,full name的來源,我目前是建立了一個(gè)包含13個(gè)英文常用名的數(shù)組查刻,username會(huì)從一個(gè)叫做username generator的網(wǎng)站上键兜,根據(jù)full name獲取,比如說full name叫做William, username generator 會(huì)根據(jù)你提交的這個(gè)名字William 返回70個(gè)(也可以設(shè)置成別的)它自動(dòng)生成的username, 為了保險(xiǎn)起見我在它返回給我的名字后面再加上"user"以及str(randint(1,2000))#隨機(jī)獲取1到2000內(nèi)任意數(shù)字并轉(zhuǎn)換為字符串穗泵,有點(diǎn)像密碼學(xué)中的加鹽普气,這樣可以規(guī)避被重復(fù)的可能。password即為full name + “password”佃延。 郵箱很有講頭现诀,即使ins不會(huì)發(fā)送認(rèn)證郵件,但我還是選擇從這個(gè)網(wǎng)站-10minutemail上獲取每十分鐘就會(huì)銷毀的郵件地址履肃。在register() class 中仔沿,這四個(gè)data的獲取都在分別的函數(shù)里,最后一個(gè)創(chuàng)建提交數(shù)據(jù)的函數(shù):
def create_ajax(self):
self.email=self.get_emailaddress()
self.f_name=self.generate_FullName()
self.passwd=self.f_name+'password'
self.u_name=self.create_username()
r_data={ 'email': self.email, #注冊(cè)郵箱 'password': self.passwd,#密碼 'username':self.u_name,#賬號(hào)(不能重復(fù)) 'first_name': self.f_name#全名 }
return r_data
注冊(cè)ins的主要流程是:創(chuàng)建提交數(shù)據(jù)-建立session-get ins-保存cookie-提交cookie-獲取response-刪除cookie
創(chuàng)建cookie和刪除cookie的函數(shù)可見文末github中ins.py文件
在post數(shù)據(jù)到ins的時(shí)候尺棋,有一個(gè)很tricky的地方封锉,在header中有一個(gè)"X-csrftoken"值,這個(gè)值的獲取要從你剛剛保存的cookie里獲取,只需要在save-cookie的函數(shù)最后加一條return cookie["csrftoken"]
并賦值到self.csrf
膘螟,在post的header中添加數(shù)據(jù)""X-csrftoken":self.csrf" 提交數(shù)據(jù)到指定的refer成福,會(huì)得到response200的提示,可以使用requests庫(kù)提供的方法判斷是否成功:
if r.ok==True:
print("[*] Sucessful create an account")
成功注冊(cè)后可以成功登陸:
這張圖是一年前的截圖荆残,最近搞的懶得截了奴艾,幾乎是一樣的:
00x02 裝備頭像
多試幾次就會(huì)發(fā)現(xiàn),剛注冊(cè)的賬號(hào)如果沒有上傳頭像内斯,很容易被認(rèn)定為機(jī)器人并在unknown的時(shí)間段被刪掉蕴潦,我所用的是pixabay.com提供的api,只需要注冊(cè)一個(gè)賬戶俘闯,獲取一個(gè)免費(fèi)的key潭苞,設(shè)置url="https://pixabay.com/api/?key="+self.key+"&q="+"people""
people可以改為別的,所以我repo目錄里的get_pic文件不僅是為了獲取頭像备徐,同時(shí)可以獲取機(jī)器賬號(hào)自動(dòng)發(fā)文的圖片萄传,所以在get_pic()
這個(gè)class里,get_selfie()方法配合download_pic()方法可以獲得隨機(jī)的蜜猾,和people元素有關(guān)的圖片秀菱,保存到當(dāng)前目錄"selfie/1.jpg"里,供給主腳本ins.py使用蹭睡,但是我在上傳圖片的函數(shù)里出現(xiàn)了問題衍菱,file={"file":open("selfie/1.jpg","rb")}
后再 r=requests.post(post_selfie_url,headers=header,proxies=self.use_proxy,data=data,files=file,verify=True)
返回的response永遠(yuǎn)是403,希望有經(jīng)驗(yàn)的朋友交流肩豁。
00x03 裝備ip
ip的使用我以前寫過別的爬蟲爬取代理ip網(wǎng)頁(yè)的例子脊串,但現(xiàn)在發(fā)現(xiàn)自己當(dāng)年太sb,這次找了一個(gè)提供api的免費(fèi)網(wǎng)站清钥,gimmeproxy,只需要構(gòu)建這個(gè)url:https://gimmeproxy.com/api/getProxy?get=true&anonymityLevel=0&country=US
用get就可以獲得一個(gè)json琼锋,包含了所需要的信息。為了測(cè)試是否可用祟昭,我在proxy.py文件里除了獲取代理IP用的get_proxy()函數(shù)缕坎,又寫了一個(gè)test()函數(shù),也是通過一個(gè)免費(fèi)api檢測(cè)本地ip的網(wǎng)站:url='https://api.ipify.org?format=json'
通過res=s.get(url,proxies=ip,verify=True)#ip是剛剛用get_ip()獲取的ip
返回的結(jié)果顯示代理ip和返回的本地ip不一樣篡悟,說明代理ip并沒有起到效果谜叹,希望有經(jīng)驗(yàn)的朋友告知一下
Summary
總體而言,ins機(jī)器人賬戶的本意是為了follow搬葬,點(diǎn)贊你的主號(hào)荷腊,但目前仍未突破ip限制,點(diǎn)贊和follow的function還未開始寫
- 源代碼鏈接: 0han's GitHub repo
- 郵箱: 0han@protonmail.com
文筆不好 評(píng)論區(qū)討論??