大家好,事隔好幾個月,終於又發帖,要說原因呢,那就是最近幾個月公司項目準備上線都比較忙,沒時間搞..
話不多說~~來點乾貨~
曾經在工作中,因爲公司的需要,做過一會模擬登陸和模擬發帖的小項目,目的就是達到不需要人手動點擊和輸入,只需要定時直接把想發的內容寫上去,加上賬號密碼就可以進行自動發帖.
這樣就可以有一個設想,可以事先建立一個賬號密碼的序列文件,格式可以隨便採用,但是要能夠自己利用代碼從文件裏面取一條一條的賬號密碼,然後就可以進行逐個發帖了,或者把再建立兩個文件,儲存需要發的文字和需要發的圖片的本地路徑,最後準備就緒,就可以開始寫代碼了.
1.首先分析一下網站登陸界面,看看發送了哪些請求,和需要哪些參數.
2.反覆登陸幾次,利用抓包軟件抓取其請求,查看有什麼區別,分析其潛在的驗證措施.
3.構建幾個基礎請求,試探能否成功發送.
4.整合代碼,構建請求類,進行正式整合代碼,把前幾個基礎類整合一起,進行發送,看是否成功,不成功再看具體問題
-------------------------------------------重點------------------------------------------------.
對第三步,有幾點問題:
1.希望各位小夥伴別用自己的賬號,多註冊幾個實驗實驗
2.發送請求的時候最好利用代理
(因爲我就在這步,封了好幾次號,和IP)
3.在第三步的時候最重要的是看密碼的加密是什麼加密方式,這個得看具體情況具體分析了,
之前搞百度的時候,那搞得可酸爽了,找資料和實驗搞了一天多,還好,最後成功了,真是感動...
4.一定一定要找對token驗證祕鑰,這東西,首先只能用一次,其次就是這個還有時效性,所以要費點時間
其他的參數吧,就有什麼搞什麼, 具體網站具體分析,就不多說了,上代碼.
-------------------------------------------代碼-------------------------------------------------------
拿來做實例的網站是一個比較普遍的大多數網站,比較小,所以驗證不是很多,就不拿大網站介紹了,百度那個我寫了一個星期左右,參數太多了,不好拿來做示例,見諒..
網站名:次元島(一個動漫cosplay網站)
class Cos():
def __init__(self):
self.redis_cli = redis.Redis(host="127.0.0.1", port=6379, db=14)
self.base_url = "http://ciyuandao.com/handler/user/userlogin"
self.Publish = 'http://ciyuandao.com/handler/share/AddShare'
self.get_token='http://ciyuandao.com/handler/sys/GetUpToken'
self.upload_img = "http://upload.qiniu.com/"
self.shareTitle = raw_input("請輸入標題:")
self.roleName = raw_input("請輸入角色名:")
self.userCn = raw_input("請輸入作者暱稱:")
self.content = raw_input("請輸入內容:")
self.img_num = raw_input("需要上傳幾張圖:")
self.s = requests.Session()
self.formdata = {
'account': '18826515118',
'password': '916128333ab',
}
self.formPublish={
"shareType":"2",
# "imgs":"FukgS7JffiP5WKfcNEJUQiqwwSQN",
"imgType":"1",
"shareTitle":self.shareTitle,
"roleName":self.roleName,
"userCn":self.userCn,
"content":self.content,
"toWeibo":"0"
}
self.qiniuimg_data = {
# "name":"456.jpg",
"chunk":"0",
"chunks":"1",
# "token": "sg8pCj-x9YrZQJ3aAJL3oMLA-NvRAVhqboGkYjyu:OMbiFV764pfjRR5LZ1zCbuZFgXU=:eyJzY29wZSI6ImNvc3BsYXlsYSIsImRlYWRsaW5lIjoxNTQwNDU0MTA5LCJpbnNlcnRPbmx5IjowLCJkZXRlY3RNaW1lIjowLCJmc2l6ZUxpbWl0IjowLCJmc2l6ZU1pbiI6MCwiY2FsbGJhY2tGZXRjaEtleSI6MH0=",
# "key":"asdasdasdsadasdasdasdasds.jpg",
}
self.headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
def home_message(self):
self.s.post(self.base_url, data=self.formdata, headers=self.headers)#登陸,獲取cookie
"""
cookie = self.s.cookies.get_dict()
self.redis_cli.set("cookie_cos_la", cookie)
cookie = eval(self.redis_cli.get("cookie_cos_la"))
html = self.s.post(self.Publish,cookies = cookie,headers = self.headers).content
"""
uptoken_obj = eval(self.s.get(self.get_token,headers = self.headers).content)#獲取七牛雲token
uptoken = uptoken_obj["uptoken"]
self.qiniuimg_data["token"]=uptoken
imgname_list=[]
for _ in range(int(self.img_num)):
img_name = raw_input("輸入上傳的圖片名:")
img_path = raw_input("輸入上傳路徑:")
# self.qiniuimg_params['name'] = self.img_name+".jpg"
# files = {'file': ("1.jpg", open("./2.jpg", "rb"), "image/jpeg")}
files = {'file': (img_name+".jpg", open(img_path, "rb"), "image/jpeg")}
img_onlyname = eval(self.s.post(self.upload_img,data=self.qiniuimg_data,files=files).content)
imgname_list.append(img_onlyname["key"])
self.formPublish["imgs"]=",".join(imgname_list)
self.s.post(self.Publish,data=self.formPublish,headers = self.headers)#上傳文章
def main(self):
self.home_message()
if __name__ == '__main__':
cos = Cos()
cos.main()
這個代碼是我18年10-11月份的,經過我當時的實驗,是可以正常發帖,和上傳圖片的,不知道現在還能不能用,可以拿去參考參考