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系列(1):简洁优雅,功能强大的编程语言
Python系列(1):简洁优雅,功能强大的编程语言
|
1月前
|
数据可视化 数据挖掘 Python
Python数据可视化:探索Matplotlib的强大功能
数据可视化在如今的数据分析和展示中扮演着至关重要的角色。本文将介绍Python中常用的数据可视化库Matplotlib,深入探讨其功能和应用,帮助读者更好地利用Matplotlib进行数据可视化。
|
1月前
|
机器学习/深度学习 数据可视化 数据处理
Python数据可视化:探索Matplotlib库的强大功能
本文将深入探讨Python中用于数据可视化的重要工具之一——Matplotlib库。通过介绍Matplotlib库的基本概念、常用功能和实际应用案例,帮助读者更好地了解如何利用Matplotlib创建各种吸引人的数据图表。
|
1月前
|
数据可视化 搜索推荐 数据挖掘
Python数据可视化——探索Matplotlib库的强大功能
数据可视化在数据分析和展示中扮演着至关重要的角色,而Matplotlib作为Python中最流行的数据可视化库之一,具有丰富的功能和灵活性。本文将深入探讨Matplotlib库的基本用法和高级功能,带您领略数据可视化的魅力。
|
11天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
15天前
|
计算机视觉 Python
如何利用Python实现简单的图像处理功能
本文介绍了如何使用Python编程语言和相关库实现简单的图像处理功能。通过学习本文,读者将了解如何读取图像文件、调整图像大小、修改图像亮度和对比度、应用滤镜效果以及保存处理后的图像。这些技术将帮助读者快速入门图像处理领域,并为他们进一步探索更高级的图像处理技术打下基础。
|
17天前
|
JavaScript 前端开发 关系型数据库
旅游规划助手:结合Vue的交云性设计和Python的强大后端功能
【4月更文挑战第11天】本文探讨了如何使用Vue.js和Python(Flask或Django)构建旅游规划助手应用,简化旅行规划。首先,确保安装了Python、Node.js、数据库系统和Git。接着,介绍如何用Python搭建后端API,分别展示了Flask和Django的例子。然后,利用Vue.js初始化前端项目,结合Vuex和Vue Router构建用户界面。最后,通过Axios实现前端与后端的数据通信。这样的架构有利于团队协作和代码维护,便于扩展应用功能。
|
1月前
|
程序员 测试技术 Python
Python中的装饰器:提升函数功能的利器
传统的摘要部分通常是对文章整体内容的简要概括,但在这篇文章中,我们将从技术角度出发,介绍Python中装饰器的作用和实际应用。通过对装饰器的解析和示例演示,读者将深入了解如何利用装饰器来提升函数的功能,从而加深对Python编程语言的理解。
|
1月前
|
存储 数据挖掘 数据处理
探索数据科学中的Python神器——Pandas库的强大功能
在数据科学领域中,Python语言的Pandas库被广泛应用于数据处理和分析。本文将深入探讨Pandas库的核心功能及其在数据科学中的重要性,帮助读者更好地理解和利用这一强大工具。
|
1月前
|
数据采集 JSON API
使用Python获取B站视频并在本地实现弹幕播放功能
使用Python获取B站视频并在本地实现弹幕播放功能
23 0