python实现QQ空间自动点赞功能

简介: python实现QQ空间自动点赞功能

使用python实现qq空间自动点赞功能。

需自行安装库并配置环境。

我想实现的是每6个小时就自动更新一次cookie。这也是和网上其他版本相比具有的优点。不用手动输入cookie。更加自动。(不负责任的说,这个功能没有测试过。)

程序运行方法:将代码存为.py文件,运行即可。

输入QQ密码的时候采用了linux登录的方式——没有回显。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

import time

import requests

import demjson

import re

import datetime

import getpass

 

 

qq = ''

pwd = ''

 

 

def print_time():

 print(datetime.datetime.now(), end=' ')

 

 

def get_gtk(p_skey):

 hash=5381

 for in p_skey:

  hash += (hash << 5)+ord(i)

 

 print_time()

 print('生成gtk')

 return hash 0x7fffffff

 

 

def change_cookie(cookie):

 = ''

 for in cookie:

  = + c['name'+ '=' + c['value'+ '; '

 

 return s

 

 

def check_time():

 now = datetime.datetime.now()

 hour = str(now)[11:13]

 minute = str(now)[14:16]

 second = str(now)[17:19]

 

 if 0 == int(hour) % 6 and minute == '00' and int(second) < 30:

  return True

 else:

  return False

 

 

def get_cookie():

 chrome_options = Options()

 chrome_options.add_argument('--headless')

 driver = webdriver.Chrome(chrome_options=chrome_options)

 

 driver.get('https://qzone.qq.com/')

 

 driver.switch_to.frame('login_frame')

 

 driver.find_element_by_id('switcher_plogin').click()

 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(pwd)

 driver.find_element_by_id('login_button').click()

 

 time.sleep(1)

 

 driver.find_element_by_id('QZ_Body').click()

 

 cookie = driver.get_cookies()

 

 # print(cookie)

 

 driver.close()

 driver.quit()

 

 print_time()

 print('提取cookie')

 

 return cookie

 

 

def get_args():

 cookie = get_cookie()

 

 for in cookie:

  if c['name'== 'p_skey':

   p_skey = c['value']

   break

 

 cookie = change_cookie(cookie)

 

 # print(p_skey)

 

 gtk = get_gtk(p_skey)

 

 return cookie, gtk

 

 

def do_like(d, gtk, headers):

 url = 'https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?g_tk=' + str(gtk)

 

 body = {

  'qzreferrer''http://user.qzone.qq.com/' + qq,

  'opuin': qq,

  'from'1,

  'active'0,

  'fupdate'1

 }

 

 try:

  html = d['html']

 

  # print(html)

  # unikey = re.search(r'data-unikey=\"http:[^"]*\"', html).group(0)

  # curkey = re.search(r'data-curkey=\"http:[^"]*\"', html).group(0)

  # print(unikey, curkey)

 

  temp = re.search('data-unikey="(http[^"]*)"[^d]*data-curkey="([^"]*)"[^d]*data-clicklog=("like")[^h]*href="javascript:;" rel="external nofollow" rel="external nofollow" ', html);

 

  if temp is None:

   return

 

  unikey = temp.group(1);

  curkey = temp.group(2);

 

  # print(unikey, curkey)

 

  body['unikey'= unikey

  body['curkey'= curkey

  body['appid'= d['appid']

  body['typeid'= d['typeid']

  body['fid'= d['key']

 

  = requests.post(url, data=body, headers=headers)

 

  if 200 == r.status_code:

   print_time()

   print('给 ' + d['nickname'+ ' 点赞')

 

 except:

  return

 

 

def get_content(headers, gtk):

 try:

  = requests.get('http://ic2.s8.qzone.qq.com/cgi-bin/feeds/feeds3_html_more?uin=0924761163&scope=0&view=1&daylist=&uinlist=&gid=&flag=1&filter=all&applist=all&refresh=0&aisortEndTime=0&aisortOffset=0&getAisort=0&aisortBeginTime=0&pagenum=1&externparam=offset%3D6%26total%3D97%26basetime%3D1470323193%26feedsource%3D0&firstGetGroup=0&icServerTime=0&mixnocache=0&scene=0&begintime=0&count=10&dayspac=0&sidomain=cnc.qzonestyle.gtimg.cn&useutf8=1&outputhtmlfeed=1&getob=1&g_tk=' + str(gtk), headers=headers)

 

  = r.text[10:-2]

 

  = demjson.decode(r)

 

  data = r['data']['data']

 

  print_time()

  print('获取了 ' + str(len(data)) + ' 条说说')

 

  return data

 except:

  return []

 

 

def main():

 

 print_time()

 print('程序运行...')

 

 global qq

 global pwd

 

 qq = input('QQ:')

 pwd = getpass.getpass('Password:')

 

 headers = {

  'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'

 }

 

 cookie, gtk = get_args()

 headers['Cookie'= cookie

 

 while True:

  time.sleep(1)

 

  if check_time():

   cookie, gtk = get_args()

   headers['Cookie'= cookie

 

   print_time()

   print('更新了 cookie 和 gtk')

 

  data = get_content(headers, gtk)

 

  for in data:

   do_like(d, gtk, headers)

 

 

if __name__ == '__main__':

 main()

这个程序在本地跑没有问题,但是我希望它能在我的腾讯云服务器上一直运行。

我在辽宁,服务器在北京,导致登录qq空间时会有滑动验证码。

于是我按照网上的教程,结合qq空间滑动验证码的实际情况,实现了qq空间滑动验证码的破解。

值得一提的是,目前成功率是100%。

有的时候不能完全重合,但还是会成功。

具体思路我就不贴出来了,感兴趣的朋友可以私信我。

下面是整合了破解滑动验证码部分的代码。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.common.action_chains import ActionChains

from PIL import Image

from io import BytesIO

import time

import requests

import demjson

import re

import datetime

import getpass

 

 

qq = ''

pwd = ''

 

 

def print_time():

 print(datetime.datetime.now(), end=' ')

 

 

def get_gtk(p_skey):

 hash=5381

 for in p_skey:

  hash += (hash << 5)+ord(i)

 

 print_time()

 print('生成gtk')

 return hash 0x7fffffff

 

 

def change_cookie(cookie):

 = ''

 for in cookie:

  = + c['name'+ '=' + c['value'+ '; '

 

 return s

 

 

def check_time():

 now = datetime.datetime.now()

 hour = str(now)[11:13]

 minute = str(now)[14:16]

 second = str(now)[17:19]

 

 if 0 == int(hour) % 6 and minute == '00' and int(second) < 30:

  return True

 else:

  return False

 

 

def get_image_difference(back_img, full_img):

 width, height = full_img.size

 

 for in range(0, width):

  for in range(0, height):

   back_pixel = back_img.getpixel((w, h))

   full_pixel = full_img.getpixel((w, h))

 

   if back_pixel != full_pixel and w > 340 and h > 10 and abs(back_pixel[0]-full_pixel[0])>50 and abs(back_pixel[1]-full_pixel[1])>50 and abs(back_pixel[2]-full_pixel[2])>50:

    return True, w

 

 return False-1

 

 

def get_cookie():

 chrome_options = Options()

 chrome_options.add_argument('--headless')

 driver = webdriver.Chrome(chrome_options=chrome_options)

 

 driver.get('https://qzone.qq.com/')

 

 driver.switch_to.frame('login_frame')

 

 driver.find_element_by_id('switcher_plogin').click()

 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(pwd)

 driver.find_element_by_id('login_button').click()

 

 time.sleep(3)

 frame = driver.find_element_by_xpath('//*[@id="newVcodeIframe"]/iframe')

 driver.switch_to.frame(frame)

 

 #

 back_url = driver.find_element_by_id('slideBkg').get_attribute('src')

 full_url = back_url.replace('hycdn_1''hycdn_0')

 

 = requests.get(back_url)

 file = BytesIO(r.content)

 back_img = Image.open(file)

 

 r.status_code = 500

 while 200 != r.status_code:

  = requests.get(full_url)

 

 file = BytesIO(r.content)

 full_img = Image.open(file)

 

 r, w = get_image_difference(back_img, full_img)

 if is False:

  return

 

 # print(w)

 # 280 * 158

 # 680 * 390

 # 55 * 55

 # 136 * 136

 # 214

 

 slide = driver.find_element_by_id('tcaptcha_drag_thumb')

 ActionChains(driver).click_and_hold(slide).perform()

 ActionChains(driver).move_by_offset(xoffset=/ 680 * 250, yoffset=0).perform()

 ActionChains(driver).release(slide).perform()

 

 # print(back_img.size)

 # print(cut_img.size)

 # print(full_img.size)

 

 time.sleep(2)

 

 driver.find_element_by_id('QZ_Body').click()

 

 cookie = driver.get_cookies()

 

 # print(cookie)

 

 driver.close()

 driver.quit()

 

 print_time()

 print('提取cookie')

 

 return cookie

 

 

def get_args():

 cookie = get_cookie()

 

 for in cookie:

  if c['name'== 'p_skey':

   p_skey = c['value']

   break

 

 cookie = change_cookie(cookie)

 

 # print(p_skey)

 

 gtk = get_gtk(p_skey)

 

 return cookie, gtk

 

 

def do_like(d, gtk, headers):

 url = 'https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?g_tk=' + str(gtk)

 

 body = {

  'qzreferrer''http://user.qzone.qq.com/' + qq,

  'opuin': qq,

  'from'1,

  'active'0,

  'fupdate'1

 }

 

 try:

  html = d['html']

 

  # print(html)

  # unikey = re.search(r'data-unikey=\"http:[^"]*\"', html).group(0)

  # curkey = re.search(r'data-curkey=\"http:[^"]*\"', html).group(0)

  # print(unikey, curkey)

 

  temp = re.search('data-unikey="(http[^"]*)"[^d]*data-curkey="([^"]*)"[^d]*data-clicklog=("like")[^h]*href="javascript:;" rel="external nofollow" rel="external nofollow" ', html);

 

  if temp is None:

   return

 

  unikey = temp.group(1);

  curkey = temp.group(2);

 

  # print(unikey, curkey)

 

  body['unikey'= unikey

  body['curkey'= curkey

  body['appid'= d['appid']

  body['typeid'= d['typeid']

  body['fid'= d['key']

 

  = requests.post(url, data=body, headers=headers)

 

  if 200 == r.status_code:

   print_time()

   print('给 ' + d['nickname'+ ' 点赞')

 

 except:

  return

 

 

def get_content(headers, gtk):

 

 try:

  = requests.get('http://ic2.s8.qzone.qq.com/cgi-bin/feeds/feeds3_html_more?uin=0924761163&scope=0&view=1&daylist=&uinlist=&gid=&flag=1&filter=all&applist=all&refresh=0&aisortEndTime=0&aisortOffset=0&getAisort=0&aisortBeginTime=0&pagenum=1&externparam=offset%3D6%26total%3D97%26basetime%3D1470323193%26feedsource%3D0&firstGetGroup=0&icServerTime=0&mixnocache=0&scene=0&begintime=0&count=10&dayspac=0&sidomain=cnc.qzonestyle.gtimg.cn&useutf8=1&outputhtmlfeed=1&getob=1&g_tk=' + str(gtk), headers=headers)

 

  = r.text[10:-2]

 

  = demjson.decode(r)

 

  data = r['data']['data']

 

  print_time()

  print('获取了 ' + str(len(data)) + ' 条说说')

 

  return data

 except:

  return []

 

 

def main():

 

 print_time()

 print('程序运行...')

 

 global qq

 global pwd

 

 qq = input('QQ:')

 pwd = getpass.getpass('Password:')

 

 headers = {

  'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'

 }

 

 cookie, gtk = get_args()

 headers['Cookie'= cookie

 

 while True:

  time.sleep(1)

 

  if check_time():

   cookie, gtk = get_args()

   headers['Cookie'= cookie

 

   print_time()

   print('更新了 cookie 和 gtk')

 

  data = get_content(headers, gtk)

 

  for in data:

   do_like(d, gtk, headers)

 

 

if __name__ == '__main__':

 main()

上面两份代码整体思路没问题,但是偶尔会有一些小bug。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

目录
相关文章
|
1月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
66 0
|
4天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
7天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
6天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
13 1
|
9天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
18 1
|
12天前
|
设计模式 缓存 测试技术
Python中的装饰器:功能增强与代码复用的艺术####
本文将深入探讨Python中装饰器的概念、用途及实现方式,通过实例演示其如何为函数或方法添加新功能而不影响原有代码结构,从而提升代码的可读性和可维护性。我们将从基础定义出发,逐步深入到高级应用,揭示装饰器在提高代码复用性方面的强大能力。 ####
|
13天前
|
缓存 测试技术 数据安全/隐私保护
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第29天】本文通过深入浅出的方式,探讨了Python装饰器的概念、使用场景和实现方法。文章不仅介绍了装饰器的基本知识,还通过实例展示了如何利用装饰器优化代码结构,提高代码的可读性和重用性。适合初学者和有一定经验的开发者阅读,旨在帮助读者更好地理解和应用装饰器,提升编程效率。
|
20天前
|
开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第22天】在Python的世界里,装饰器是一个强大的工具,它能够让我们以简洁的方式修改函数的行为,增加额外的功能而不需要重写原有代码。本文将带你了解装饰器的基本概念,并通过实例展示如何一步步构建自己的装饰器,从而让你的代码更加高效、易于维护。
|
22天前
|
开发框架 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第20天】在编程的海洋中,简洁与强大是航行的双桨。Python的装饰器,这一高级特性,恰似海风助力,让代码更优雅、功能更强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一步步深入其内涵与意义。
|
27天前
|
云计算 Python
用python给你写个简单的计算器功能网页啊
这张图片展示了阿里巴巴集团的组织架构图,涵盖了核心电商、云计算、数字媒体与娱乐、创新业务等主要板块,以及各板块下的具体业务单元和部门。