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月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
65 1
|
28天前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
55 0
|
1天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
9 1
|
5天前
|
设计模式 缓存 测试技术
Python中的装饰器:功能增强与代码复用的艺术####
本文将深入探讨Python中装饰器的概念、用途及实现方式,通过实例演示其如何为函数或方法添加新功能而不影响原有代码结构,从而提升代码的可读性和可维护性。我们将从基础定义出发,逐步深入到高级应用,揭示装饰器在提高代码复用性方面的强大能力。 ####
|
6天前
|
缓存 测试技术 数据安全/隐私保护
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第29天】本文通过深入浅出的方式,探讨了Python装饰器的概念、使用场景和实现方法。文章不仅介绍了装饰器的基本知识,还通过实例展示了如何利用装饰器优化代码结构,提高代码的可读性和重用性。适合初学者和有一定经验的开发者阅读,旨在帮助读者更好地理解和应用装饰器,提升编程效率。
|
13天前
|
开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第22天】在Python的世界里,装饰器是一个强大的工具,它能够让我们以简洁的方式修改函数的行为,增加额外的功能而不需要重写原有代码。本文将带你了解装饰器的基本概念,并通过实例展示如何一步步构建自己的装饰器,从而让你的代码更加高效、易于维护。
|
14天前
|
开发框架 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第20天】在编程的海洋中,简洁与强大是航行的双桨。Python的装饰器,这一高级特性,恰似海风助力,让代码更优雅、功能更强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一步步深入其内涵与意义。
|
19天前
|
云计算 Python
用python给你写个简单的计算器功能网页啊
这张图片展示了阿里巴巴集团的组织架构图,涵盖了核心电商、云计算、数字媒体与娱乐、创新业务等主要板块,以及各板块下的具体业务单元和部门。
|
1天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
8 0
|
25天前
|
设计模式 开发者 Python
Python中的装饰器:简化代码与增强功能
【10月更文挑战第9天】在编程的世界里,效率和可读性是衡量代码质量的两大关键指标。Python语言以其简洁明了的语法赢得了无数开发者的青睐,而装饰器则是其独特魅力之一。本文将深入探讨装饰器的工作原理、使用方法以及如何通过自定义装饰器来提升代码的重用性和可维护性,让读者能够更加高效地编写出既优雅又功能强大的代码。

热门文章

最新文章