Created
February 21, 2018 08:57
-
-
Save xiaostrong/a680b8d9c932911247d91730323500ce to your computer and use it in GitHub Desktop.
QQ空间留言脚本
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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