Ins水軍來襲-淺談利用python腳本批量註冊ins賬號
【@0han 本文首發於本人簡書博客並分享至掘金社區 未經授權請勿轉載】
Python批量註冊instagram賬戶,利用了ins在用戶註冊時不驗證郵箱的漏洞,現已成功實現自動註冊,同時遇到的問題是ip代理的不可用,導致註冊超過10個以後被ins要求添加手機號,此文更改於2016年研究並發布的項目,2017年8月按照OOP重寫了腳本,源代碼見文底github,遇到的問題見下,有解決辦法的朋友請評論區告知,感激不盡。
環境:Python3.x
依賴的第三方庫: requests, BeautifulSoup
依賴的庫: import requests,re,json,time,os,os.path,sys
遇到的問題:
- requests.get(url,proxies=ip)#使用代理時,發現requests的代理並無用處,由於獲取代理的輪子是自己寫的,專門做了驗證,確實無法實現代理,這也導致了ins封鎖我的ip註冊數
- 我還寫了一個下載頭像用的庫(下面有詳解),但是在提交頭像到ins時沒有成功,不太清楚怎麼處理。
00x01 ins註冊流程
Instagram的註冊頁:
很顯然提交四個數據,email, username, password, full name. 其中email, username不能和別的用戶重複,first name作為顯示的nickname,full name可以隨便寫,full name的來源,我目前是建立了一個包含13個英文常用名的數組,username會從一個叫做username generator的網站上,根據full name獲取,比如說full name叫做William, username generator 會根據你提交的這個名字William 返回70個(也可以設置成別的)它自動生成的username, 為了保險起見我在它返回給我的名字後面再加上"user"以及str(randint(1,2000))#隨機獲取1到2000內任意數字並轉換為字元串,有點像密碼學中的加鹽,這樣可以規避被重複的可能。password即為full name + 「password」。 郵箱很有講頭,即使ins不會發送認證郵件,但我還是選擇從這個網站-10minutemail上獲取每十分鐘就會銷毀的郵件地址。在register() class 中,這四個data的獲取都在分別的函數里,最後一個創建提交數據的函數:
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,#賬號(不能重複) first_name: self.f_name#全名 } return r_data
註冊ins的主要流程是:創建提交數據-建立session-get ins-保存cookie-提交cookie-獲取response-刪除cookie
創建cookie和刪除cookie的函數可見文末github中ins.py文件在post數據到ins的時候,有一個很tricky的地方,在header中有一個"X-csrftoken"值,這個值的獲取要從你剛剛保存的cookie里獲取,只需要在save-cookie的函數最後加一條return cookie["csrftoken"]並賦值到self.csrf,在post的header中添加數據""X-csrftoken":self.csrf" 提交數據到指定的refer,會得到response200的提示,可以使用requests庫提供的方法判斷是否成功:
if r.ok==True: print("[*] Sucessful create an account")
成功註冊後可以成功登陸:忘了截圖了,下面這張圖是一年前的圖,一樣的效果:
00x02 裝備頭像
多試幾次就會發現,剛註冊的賬號如果沒有上傳頭像,很容易被認定為機器人並在unknown的時間段被刪掉,我所用的是pixabay.com提供的api,只需要註冊一個賬戶,獲取一個免費的key,設置
url="https://pixabay.com/api/?key="+self.key+"&q="+"people""
people可以改為別的,所以我repo目錄里的get_pic文件不僅是為了獲取頭像,同時可以獲取機器賬號自動發文的圖片,所以在get_pic()這個class里,get_selfie()方法配合download_pic()方法可以獲得隨機的,和people元素有關的圖片,保存到當前目錄"selfie/1.jpg"里,供給主腳本ins.py使用,但是我在上傳圖片的函數里出現了問題,
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永遠是403,希望有同樣情況的朋友留言。
00x03 裝備ip
ip的使用我以前寫過別的爬蟲爬取代理ip網頁的例子,但現在發現自己當年太sb,這次找了一個提供api的免費網站,gimmeproxy,只需要構建這個url:
https://gimmeproxy.com/api/getProxy?get=true&anonymityLevel=0&country=US
用get就可以獲得一個json,包含了所需要的信息,最後的country是國家,我用的是US,以前給爬蟲裝中國的代理ip爬ins,感覺自己簡直蠢。。。。
為了測試是否可用,我在proxy.py文件里除了獲取代理IP用的get_proxy()函數,又寫了一個test()函數,也是通過一個免費api檢測本地ip的網站:
url=https://api.ipify.org?format=json res=s.get(url,proxies=ip,verify=True)#ip是剛剛用get_ip()獲取的ip
返回的結果顯示代理ip和返回的本地ip不一樣,如下圖所示,說明代理ip並沒有起到效果,希望有經驗的朋友告知一下:
Summary
總體而言,ins機器人賬戶的本意是為了follow,點贊,評論指定賬號,比如你的主號,但目前仍未突破ip限制,點贊和follow的function還未開始寫。
- 源代碼鏈接: 0hans GitHub repo
- 郵箱: 0han@protonmail.com
Tips:
知乎文章的點贊button所屬的class叫:
Button PostIndex-voteButton Button--green
知乎回答的點贊button所屬的class叫:
Button VoteButton VoteButton--up
你知道為什麼一個是green,一個是up嗎,知乎的前端設計師在設計這個詞的時候參考了Green和UP的用法,Green在英文中有Agree, support的意思; UP在英文中有這個意思: do something unexpectedly.所以說按綠色的贊代表你看過了文章深思熟慮後按下了贊,而那個Up按鈕就是你看爽了順手點了下
所以你不想做個深思熟慮思考的人嗎?
推薦閱讀: