———————————————————————————————————————————
我初中那會,特別流行給喜歡的人刷空間留言,踩踩空間之類的非主流行爲,那個時候就是拿手機一條一條的留,每句話還得思考思考,所以那個時候特別希望能有一個軟件實現這樣的功能,現在利用python我終於實現了以前的夢想,後面我寫好了之後試了一下,發現沒以前那味了,不過,還是可以寫給大家娛樂娛樂,切勿隨便惡搞朋友,我現在已經遭受了朋友的毒打🤮!哈哈哈,估計這個在阿雪QQ實驗,我又要被暴打/(ㄒoㄒ)/~~
———————————————————————————————————————————
設計思路:
這個程序主要用到了requests庫的post方法和隨機函數庫random和一些文件的基本使用,整體代碼很簡單,可以自行修改的地方也很多,喜歡擼代碼的朋友可以改進,甚至也可以用到其他相同功能的地方上去,具體還能幹什麼,我就不泄露了。
主要函數庫:
requests and random
文件的處理:
選擇自己喜歡的句子,然後整理到txt裏面就可以了,類似我下面這樣:
對這個文件的處理:打開這個文件,讀取它,寫入列表就行了,代碼如下:
def file_word1(): # 打開第一個留言板 網易雲留言版
words1 = []
with open("D://py//網易雲留言板.txt", "r") as fo:
for i in fo:
words1.append(str(i.strip("\n").split("\t")))
return words1
requests提交的處理:
這個要先去qq空間留言一次,獲得我們需要的東西,在控制檯裏面找到這個netword,然後點擊XHR再找到圖中高亮度的這個包
關於我是如何找到這個東西:首先這個請求一定是post方式,不是post的一律不看,然後我們之前留言了一次,我們有留言句子對照,在post方式的請求裏面找,如果找到我們留言的句子,那這個就是我們需要的包
右邊大致是這樣的:
General裏面有一個request_URL 這個網址我們要
Request Headers 這一整個我們也要
From Data 這一整個我們也要
主程序:
def post_word_list(word_list, url): # word_list 是文件轉換成的文本 url是我們之前獲取的
string = random.choice(word_list).strip("[]").strip("''") # 利用隨機函數,隨機選一個句子
print(string) # 然後用函數對應操作了一下
post_date = {
"content": string,
"hostUin": "-------",
"uin": "----------",
"format": "fs",
"inCharset": "utf-8",
"outCharset": "utf-8",
"iNotice": "1",
"ref": "qzone",
"json": "1",
"g_tk": "177400420",
"qzreferrer": "https://user.qzone.qq.com/proxy/domain/qzs.qq.com/qzone/msgboard/msgbcanvas.html#page=1"
}
'''referer 和 cookie 這個會變化'''
post_headers = {
"authority": "h5.qzone.qq.com",
"method": "POST",
"path": '/proxy/domain/m.qzone.qq.com/cgi-bin/new/add_msgb?qzonetoken=c44168cfcc1a7ac91306dc6b7779a65b29522d20c18cc4a9a2309b930787bd6836761975850a34a4&g_tk=177400420',
"scheme": "https",
"accept": "* / *",
"accept- encoding": "gzip, deflate, br",
"accept - language": "zh - CN, zh;q = 0.9",
"content - length": "319",
"content - type": "application / x - www - form - urlencoded;charset = UTF - 8",
"cookie": "--------",
"origin": "https: // user.qzone.qq.com",
"referer": "------------------",
"sec - fetch - mode": "cors",
"sec - fetch - site": "same - site",
"user - agent": "Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.108 Safari / 537.36"
}
r = requests.post(url, data=post_date, headers=post_headers)
這個程序也有個bug,從網頁中獲得的cooike會定期改變,導致這個代碼如果很久沒用了,就要重新複製上面的網頁信息,比較雞肋,之前有看過selenium的操作,也沒想到什麼對應的方法來搞這個bug,如果有知道的,歡迎評論留言,對代碼有疑問或者不懂的可以評論問我。
全部代碼:
# 每次進入網站的cookies都會變化 需要更新cookies
import requests
import random
import time
def post_word_list(word_list, url):
string = random.choice(word_list).strip("[]").strip("''") #這個需要對應操作 不一定按照我這樣
print(string)
post_date = {
"content": string,
"hostUin": "-------",
"uin": "--------",
"format": "fs",
"inCharset": "utf-8",
"outCharset": "utf-8",
"iNotice": "1",
"ref": "qzone",
"json": "1",
"g_tk": "177400420",
"qzreferrer": "https://user.qzone.qq.com/proxy/domain/qzs.qq.com/qzone/msgboard/msgbcanvas.html#page=1"
}
'''referer 和 cookie 這個會變化'''
post_headers = {
"authority": "h5.qzone.qq.com",
"method": "POST",
"path": '/proxy/domain/m.qzone.qq.com/cgi-bin/new/add_msgb?qzonetoken=c44168cfcc1a7ac91306dc6b7779a65b29522d20c18cc4a9a2309b930787bd6836761975850a34a4&g_tk=177400420',
"scheme": "https",
"accept": "* / *",
"accept- encoding": "gzip, deflate, br",
"accept - language": "zh - CN, zh;q = 0.9",
"content - length": "319",
"content - type": "application / x - www - form - urlencoded;charset = UTF - 8",
"cookie": '----------',
"origin": "https: // user.qzone.qq.com",
"referer": "-------------------",
"sec - fetch - mode": "cors",
"sec - fetch - site": "same - site",
"user - agent": "Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.108 Safari / 537.36"
}
r = requests.post(url, data=post_date, headers=post_headers)
def demo(word_list, url): # 自定義留言模塊
num = eval(input("請輸入你要留言的次數:"))
for i in range(1, num+1):
post_word_list(word_list, url)
print("----------------已經留言{}次,還剩下{}次!".format(i, num-i))
time.sleep(30) # 30秒一條 防止後臺封ip
print('本次留言完成!')
time.sleep(3)
main()
def diy_words(): # 打開自定義留言板
words3 = []
string = input("請輸入你想留言的語句:")
words3.append(string)
return words3
def file_word1(): # 打開第一個留言板 網易雲留言版
words1 = []
with open("D://py//網易雲留言板.txt", "r") as fo:
for i in fo:
words1.append(str(i.strip("\n").split("\t")))
return words1
def file_word2(): # 打開第二個留言版 經典留言版
words2 = []
with open("D://py//經典留言版.txt", "r") as fo:
for i in fo:
words2.append(str(i.strip("\n").split("\t")))
return words2
def choices(n):
if n == 1:
return diy_words()
elif n == 2:
return file_word1()
elif n == 3:
return file_word2()
else:
print("你的選擇有誤,請確定無誤後重新輸入:")
def main():
print("-" * 50)
print("該系統有三個選項經供參考:")
print("1:自定義留言板:")
print("2:網易雲經典評論留言板:")
print("3:經典留言板:")
print("-" * 50)
n = eval(input("請按照你的需求選擇前方的序號:"))
word_list = choices(n) # 選擇所需功能
url = '------------------------------' #這個是前文提到的要獲取的URL複製上去就行
demo(word_list, url)
main()