【作者: 0han 未經(jīng)授權(quán)請勿轉(zhuǎn)載】
Python批量注冊instagram賬戶,利用了ins在用戶注冊時不驗證郵箱的漏洞,現(xiàn)已成功實現(xiàn)自動注冊,同時遇到的問題是ip代理的不可用,導(dǎo)致注冊超過10個以后被ins要求添加手機(jī)號,此文更改于2016年的項目,2017年8月重新按照面對對象編程重寫了腳本,源代碼見文底github,遇到的問題見下,有解決辦法的朋友請評論區(qū)告知,感激不盡。
環(huán)境:Python3.x
依賴的第三方庫: requests, BeautifulSoup
依賴的庫: import requests,re,json,time,os,os.path,sys
遇到的問題:
- requests.get(url,proxies=ip)#使用代理時,發(fā)現(xiàn)requests的代理并無用處,由于獲取代理的輪子是自己寫的,專門做了驗證,確實無法實現(xiàn)代理,這也導(dǎo)致了ins封鎖我的ip注冊數(shù)
- 我還寫了一個下載頭像用的庫(下面有詳解),但是在提交頭像到ins時沒有成功,不太清楚怎么處理。
00x01 ins注冊流程
Instagram的注冊頁:
很顯然提交四個數(shù)據(jù),email, username, password, full name. 其中email, username不能和別的用戶重復(fù),first name作為顯示的nickname,full name可以隨便寫,full name的來源,我目前是建立了一個包含13個英文常用名的數(shù)組,username會從一個叫做username generator的網(wǎng)站上,根據(jù)full name獲取,比如說full name叫做William, username generator 會根據(jù)你提交的這個名字William 返回70個(也可以設(shè)置成別的)它自動生成的username, 為了保險起見我在它返回給我的名字后面再加上"user"以及str(randint(1,2000))#隨機(jī)獲取1到2000內(nèi)任意數(shù)字并轉(zhuǎn)換為字符串,有點像密碼學(xué)中的加鹽,這樣可以規(guī)避被重復(fù)的可能。password即為full name + “password”。 郵箱很有講頭,即使ins不會發(fā)送認(rèn)證郵件,但我還是選擇從這個網(wǎng)站-10minutemail上獲取每十分鐘就會銷毀的郵件地址。在register() class 中,這四個data的獲取都在分別的函數(shù)里,最后一個創(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, #注冊郵箱 'password': self.passwd,#密碼 'username':self.u_name,#賬號(不能重復(fù)) 'first_name': self.f_name#全名 }
return r_data
注冊ins的主要流程是:創(chuàng)建提交數(shù)據(jù)-建立session-get ins-保存cookie-提交cookie-獲取response-刪除cookie
創(chuàng)建cookie和刪除cookie的函數(shù)可見文末github中ins.py文件
在post數(shù)據(jù)到ins的時候,有一個很tricky的地方,在header中有一個"X-csrftoken"值,這個值的獲取要從你剛剛保存的cookie里獲取,只需要在save-cookie的函數(shù)最后加一條return cookie["csrftoken"]并賦值到self.csrf,在post的header中添加數(shù)據(jù)""X-csrftoken":self.csrf" 提交數(shù)據(jù)到指定的refer,會得到response200的提示,可以使用requests庫提供的方法判斷是否成功:
if r.ok==True:
print("[*] Sucessful create an account")
成功注冊后可以成功登陸:

這張圖是一年前的截圖,最近搞的懶得截了,幾乎是一樣的:

00x02 裝備頭像
多試幾次就會發(fā)現(xiàn),剛注冊的賬號如果沒有上傳頭像,很容易被認(rèn)定為機(jī)器人并在unknown的時間段被刪掉,我所用的是pixabay.com提供的api,只需要注冊一個賬戶,獲取一個免費(fèi)的key,設(shè)置url="https://pixabay.com/api/?key="+self.key+"&q="+"people""
people可以改為別的,所以我repo目錄里的get_pic文件不僅是為了獲取頭像,同時可以獲取機(jī)器賬號自動發(fā)文的圖片,所以在get_pic()這個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)驗的朋友交流。
00x03 裝備ip
ip的使用我以前寫過別的爬蟲爬取代理ip網(wǎng)頁的例子,但現(xiàn)在發(fā)現(xiàn)自己當(dāng)年太sb,這次找了一個提供api的免費(fèi)網(wǎng)站,gimmeproxy,只需要構(gòu)建這個url:https://gimmeproxy.com/api/getProxy?get=true&anonymityLevel=0&country=US用get就可以獲得一個json,包含了所需要的信息。為了測試是否可用,我在proxy.py文件里除了獲取代理IP用的get_proxy()函數(shù),又寫了一個test()函數(shù),也是通過一個免費(fèi)api檢測本地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)驗的朋友告知一下
Summary
總體而言,ins機(jī)器人賬戶的本意是為了follow,點贊你的主號,但目前仍未突破ip限制,點贊和follow的function還未開始寫
- 源代碼鏈接: 0han's GitHub repo
- 郵箱: 0han@protonmail.com
文筆不好 評論區(qū)討論??