from selenium.webdriver import ActionChains from selenium import webdriver from time import sleep import requests import json import re ''' * 作者 LinOwl ''' def SliderSpeed(distance):#加速度 list_timeDistance = [] t, sum_x, v0 = 0.7, 0, 1 while (sum_x < distance): if (sum_x < distance * 0.7): a = 2 else: a = -1 v = v0 s = v * t + 0.5 * a * pow(t, 2) sum_x += s list_timeDistance.append((distance-sum(list_timeDistance)) if sum_x > distance else s) v0 = v + a * t return list_timeDistance def Get_gtk(p_skey): hash_ = 5381 for key in p_skey: hash_ += (hash_ << 5) + ord(key) return str(hash_ & 0x7fffffff) class action: def __init__(self): self.QQ_Number = '' #账号 self.QQ_Password = '' #密码 self.DictCookie = {} #cookie self.g_tk = '' self.Dic_QQfriend = {} def login(self):#登录QQ空间 driver = webdriver.Chrome() # driver.maximize_window() #最大化 driver.get('https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&&hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_url=https%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_qr_app=手机QQ空间&pt_qr_link=http%3A//z.qzone.com/download.html&self_regurl=https%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http%3A//z.qzone.com/download.html&pt_no_auth=1') driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click() driver.find_element_by_xpath('//*[@id="u"]').send_keys(self.QQ_Number) driver.find_element_by_xpath('//*[@id="p"]').send_keys(self.QQ_Password) driver.find_element_by_xpath('//*[@id="login_button"]').click() sleep(1) try: isoldurl = driver.current_url frame = driver.find_element_by_xpath('//*[@id="tcaptcha_iframe"]') # 定位嵌套框架 driver.switch_to.frame(frame) # 进入嵌套框架 while (isoldurl == driver.current_url and driver.current_url != 'https://user.qzone.qq.com/' + self.QQ_Number): driver.find_element_by_xpath('//*[@id="e_reload"]').click() # 刷新滑块 sleep(3) blud_bt = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]') ActionChains(driver).click_and_hold(on_element=blud_bt).perform() tracks = SliderSpeed(178) # 滑块 拖动值在175左右 for t_s in tracks: ActionChains(driver).move_by_offset(xoffset=t_s, yoffset=0).perform() sleep(0.8) ActionChains(driver).release().perform() except: print('null') cookies = driver.get_cookies() for item in cookies: self.DictCookie[item['name']] = item['value'] self.g_tk = Get_gtk(self.DictCookie['p_skey']) driver.close() def get_QQfriend(self):#遍历好友 for offset in range(0,900001,50): html = requests.get('https://h5.qzone.qq.com/proxy/domain/base.qzone.qq.com/cgi-bin/right/get_entryuinlist.cgi?uin='+self.QQ_Number+'&fupdate=1&action=1&offset='+str(offset)+'&g_tk='+self.g_tk,cookies=self.DictCookie) json_str = json.loads(html.text.replace('_Callback(', '').replace(');', '')) friend_n = json_str['data']['uinlist'].__len__() for json_i in range(0, friend_n): self.Dic_QQfriend[json_str['data']['uinlist'][json_i]['label']] = json_str['data']['uinlist'][json_i]['data'] if (friend_n < 50): break def add_QQfriend(self,QQnumber):#添加好友 requests_data = { 'sid':0, 'ouin':QQnumber, 'from_source':4, 'uin':self.QQ_Number, 'fupdate':1, 'qzreferrer':'https%3A%2F%2Fuser.qzone.qq.com%2Fproxy%2Fdomain%2Fqzs.qq.com%2Fqzone%2Fv6%2Ffriend_manage%2Faddfriend%2Findex.html%23ouin%3D'+QQnumber+'%26sid%3D0%26from_source%3D4%26from%3D9', 'flag':0, 'groupId':0, 'im':0, 'from':9 } respon_addData = requests.post('https://h5.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/tfriend/friend_addfriend.cgi?&g_tk='+self.g_tk,cookies=self.DictCookie,data=requests_data) print(re.findall('"message":"(.*?)",',respon_addData.text)) action = action() action.login() # action.get_QQfriend() # print(action.Dic_QQfriend) action.add_QQfriend('待加QQ')
ps:纯属娱乐,勿干坏事。