能自动点赞的小程序
python实现QQ空间自动点赞功能本文实例为大家分享了python实现qq空间自动点赞的具体代码,供大家参考,具体内容如下
项目github地址
使用python实现qq空间自动点赞功能。
需自行安装库并配置环境。
我想实现的是每6个小时就自动更新一次cookie。这也是和网上其他版本相比具有的优点。不用手动输入cookie。更加自动。(不负责任的说,这个功能没有测试过。)
程序运行方法:将代码存为.py文件,运行即可。
输入qq密码的时候采用了linux登录的方式——没有回显。
|
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 i in p_skey: hash + = ( hash << 5 ) + ord (i) print_time() print ( '生成gtk' ) return hash & 0x7fffffff def change_cookie(cookie): s = '' for c in cookie: s = s + 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 c 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' ] r = 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 : r = 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 = r.text[ 10 : - 2 ] r = 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 d in data: do_like(d, gtk, headers) if __name__ = = '__main__' : main() |
这个程序在本地跑没有问题,但是我希望它能在我的腾讯云服务器上一直运行。
我在辽宁,服务器在北京,导致登录qq空间时会有滑动验证码。
于是我按照网上的教程,结合qq空间滑动验证码的实际情况,实现了qq空间滑动验证码的破解。
值得一提的是,目前成功率是100%。
有的时候不能完全重合,但还是会成功。
具体思路我就不贴出来了,感兴趣的朋友可以私信我。
下面是整合了破解滑动验证码部分的代码。