前言:输入才有输出,输出倒逼输入。
今天想看一个人的QQ空间发现被屏了,就研究了一段大佬的代码看看还有多少人屏蔽了我。记录一下自己遇到的问题,并学习到的知识。
1.每次输入完QQ就没了,不显示输入密码什么的
原因:通过__import__直接导入的getpass模块在 Pycharm 中不可用。
password = __import__('getpass').getpass('请输入qq密码:')
换到IDLe运行就可以了。会在屏幕显示出密码,打的时候小心点:
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
def search_cookie():
if not __import__('os').path.exists('cookie_dict.txt'):
get_cookie_json()
with open('cookie_dict.txt', 'r') as f:
cookie = json.load(f)
return cookie
def get_cookie_json(): # 无头selenium登陆
qq_number = input('请输入qq号:')
password = __import__('getpass').getpass('请输入qq密码:')
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
login_url = 'https://i.qq.com/'
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.get(login_url)
driver.switch_to_frame('login_frame')
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="u"]').send_keys(qq_number)
driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)
time.sleep(1)
driver.find_element_by_xpath('//*[@id="login_button"]').click()
time.sleep(1)
cookie_list = driver.get_cookies()
cookie_dict = {}
for cookie in cookie_list:
if 'name' in cookie and 'value' in cookie:
cookie_dict[cookie['name']] = cookie['value']
with open('cookie_dict.txt', 'w') as f:
json.dump(cookie_dict, f)
return True
def get_g_tk(): # QQ空间的加密算法
p_skey = cookie['p_skey']
h = 5381
for i in p_skey:
h += (h << 5) + ord(i)
g_tk = h & 2147483647
return g_tk
def get_friends_uin(g_tk): # 获得好友的QQ号信息
yurl = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?'
data = {
'uin': cookie['ptui_loginuin'],
'do': 1,
'g_tk': g_tk
}
url = yurl + urllib.parse.urlencode(data)
res = requests.get(url, headers=headers, cookies=cookie)
r = res.text.split('(')[1].split(')')[0]
friends_list = json.loads(r)['data']['items_list']
friends_uin = []
for f in friends_list:
friends_uin.append(f['uin'])
return friends_uin
def get_blacklist(friends): # 查询被挡好友的QQ号,用小本本记下来!
access_denied = [] # 拉黑笔记,小本本记下来!
yurl = 'https://user.qzone.qq.com/'
for friend in friends:
print("开始检查:" + str(friend))
url = yurl + str(friend)
res = requests.get(url, headers=headers, cookies=cookie)
tip = etree.HTML(res.text).xpath('/html/body/div/div/div[1]/p/text()')
if len(tip) > 0:
# if tip[0][:7] == "主人设置了权限":
print(str(friend) + "空间不可见!")
access_denied.append(friend)
return access_denied
def recording(): # 主函数
global cookie
cookie = search_cookie()
g_tk = get_g_tk()
friends_uin = get_friends_uin(g_tk)
access_denied = get_blacklist(friends_uin)
print(f"一共有{len(access_denied)}空间不可见!")
with open('access_denied.txt', 'w') as f:
for a in access_denied:
f.write(str(a) + '\n')
if __name__ == '__main__': # 运行
recording()
参考连接:
详情戳<-_->源码