Skip to content

Instantly share code, notes, and snippets.

@xiaostrong
Created February 21, 2018 08:57
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save xiaostrong/a680b8d9c932911247d91730323500ce to your computer and use it in GitHub Desktop.
Save xiaostrong/a680b8d9c932911247d91730323500ce to your computer and use it in GitHub Desktop.
QQ空间留言脚本
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import requests
import time
import re
import json
import time
def login():
options = webdriver.ChromeOptions()
#设置中文
options.add_argument('lang=zh_CN.UTF-8')
#自定义ua
useragent = 'Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4 Prime Build/NJH47F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.78 Mobile Safari/537.36url)'
options.add_argument(useragent)
#配置headless chrome
options.add_argument('headless')
#配置options
driver = webdriver.Chrome(chrome_options=options)
host = 'https://mobile.qzone.qq.com'
#加载页面
driver.get(host)
driver.implicitly_wait(10)
# 填写登录信息
driver.find_element_by_id('u').clear()
driver.find_element_by_id('u').send_keys('QQ账号')
driver.find_element_by_id('p').clear()
driver.find_element_by_id('p').send_keys('QQ密码')
# 登录
driver.find_element_by_id('p').send_keys(Keys.RETURN)
time.sleep(2)
# 获取Cookie
cookies = driver.get_cookies()
cookie = {}#初始化cookie字典
for elem in cookies:#取cookies
cookie[elem['name']] = elem['value']
#g_tk算法
hashes = 5381
for letter in cookie['p_skey']:
hashes += (hashes << 5) + ord(letter)
g_tk = hashes & 0x7fffffff
#网页源码中匹配qzonetoken
qzonetoken = re.search(r'\(function\(\)\{ try\{return (.*?);\} catch\(e\)', driver.page_source).group(1)
#关闭driver
driver.quit()
result = (cookie, g_tk, qzonetoken)
with open('data.json', 'w') as f:
json.dump(result, f)
return cookie, g_tk, qzonetoken
def addMessage(cookies, g_tk, qzonetoken, number, content):
host = 'https://mobile.qzone.qq.com'
path = '/msgb/fcg_add_msg'
url = host + path
headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4 Prime Build/NJH47F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.78 Mobile Safari/537.36url)'}
params = {'qzonetoken' : qzonetoken, 'g_tk' : g_tk}
payload = {'res_uin' : number, 'format' : 'json', 'content' : content, 'opr_type' : 'add_comment'}
r = requests.post(url, headers=headers, cookies=cookies, params=params, data=payload)
#判断提交是否成功
return json.loads(r.text)["code"] + r.status_code
if __name__ == '__main__':
try:
with open('data.json', 'r') as f:
data = json.load(f)
cookies = data[0]
g_tk = data[1]
qzonetoken = data[2]
except IOError:
cookies, g_tk, qzonetoken = login()
finally:
localtime = time.asctime(time.localtime(time.time()))
number = '留言账号'
if(addMessage(cookies, g_tk, qzonetoken, number, '都是傻逼,一次成功') != 200):
print("留言失败,重新登录" + localtime)
cookies, g_tk, qzonetoken = login()
addMessage(cookies, g_tk, qzonetoken, number, '去他娘的,又来一次')
else:
print("留言成功 " + localtime)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment