#coding: utf-8

"""

开心网操作脚本

Author: piglei2007@gmail.com

Version: 1.0

"""

import re

import urllib

import urllib2

import random

import hashlib

import binascii

import cookielib

import simplejson

from xxtea import encrypt

LOGIN_URL = "http://www.kaixin001.com/login/login_api.php"

LOGIN_KEY_URL = "http://www.kaixin001.com/"

FRIEND_LIST_URL = "http://www.kaixin001.com/interface/suggestfriend.php"

MESSAGE_SEND_URL = "http://www.kaixin001.com/msg/post.php"

LOGIN_KEY_RE = re.compile(r"new\sEnLogin\('(.*?)'")

class LoginError(Exception):

"""

登录失败抛出异常

"""

class Kaixin001User(object):

"""

操作kaixin001,现有方法:

get_login_key - 获得用户访问登录页面时分配的加密key

get_rpassword - 获得经过xxtea以及sha1加密后的密码

login - 登录

get_friends_list - 获得所有好友,返回字典格式

send_messages_to_all - 给所有好友发消息

"""

def __init__(self, username, password):

self.username = username

self.password = password

self.cj = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))

opener.addheaders = [

("User-agent", "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.1) Gecko/20090704 Firefox/3.5"),

("Accept", "*/*"),

("Host", "www.kaixin001.com")

]

urllib2.install_opener(opener)

def get_login_key(self):

"""

获得登录时候的加密key

"""

_temp = urllib2.urlopen(LOGIN_KEY_URL).read()

key = LOGIN_KEY_RE.search(_temp).group(1)

return key

def login(self):

"""

登录

"""

login_key = self.get_login_key()

rpassword = self.get_rpassword(self.password, login_key)

login_params = {

'email': self.username,

'encypt': login_key,

'rpasswd': rpassword,

'url': '/home/',

'ver': '1'

}

req = urllib2.Request(LOGIN_URL, urllib.urlencode(login_params), {

"Referer": "http://www.kaixin001.com/"

})

result = urllib2.urlopen(req).read()

# 登录失败

if "errno" in result:

raise LoginError("登录失败,请检查用户名或密码")

print "用户 %s 登录成功!" % self.username

return 'ok'

def get_friends_list(self):

"""

获得所有好友列表

"""

get_friends_params = {

't': str(random.random()),

'type': 'all',

}

result = urllib2.urlopen(FRIEND_LIST_URL, urllib.urlencode(get_friends_params)).read()

friends = simplejson.loads(result)

print "你一共有 %s 位好友" % (len(friends) - 1)

return friends

def send_messages_to_all(self, message=''):

"""

给所有好友发消息

"""

friends = self.get_friends_list()

send_params = {

'attachment_cancel': '',

'attachment_forwarding': '',

'attachment_random': '',

'code': '',

'content': message,

'forward_thread': '',

'rcode': '',

'service': '0',

'texttype': 'html',

'uids': ",".join([str(f['uid']) for f in friends])

}

result = urllib2.urlopen(MESSAGE_SEND_URL, urllib.urlencode(send_params))

print result.geturl()

print "消息发送成功"

return 'ok'

def get_rpassword(self, password, key):

"""

获得加密后的密码

"""

xxtea_pw = binascii.b2a_hex( encrypt(password, key) )

r_password = hashlib.sha1(xxtea_pw).hexdigest()

return r_password

if __name__ == '__main__':

kxu = Kaixin001User(

username = 'your_username',

password = 'your_password'

)

kxu.login()

kxu.send_messages_to_all("This message is send by Python.")

这是脚本中需要用到的xxtea算法的python实现(xxtea.py):

import struct

_DELTA = 0x9E3779B9

def _long2str(v, w):

n = (len(v) - 1) << 2

if w:

m = v[-1]

if (m < n - 3) or (m > n): return ''

n = m

s = struct.pack('> 2), s))

if w: v.append(n)

return v

def encrypt(str, key):

if str == '': return str

v = _str2long(str, True)

k = _str2long(key.ljust(16, "\0"), False)

n = len(v) - 1

z = v[n]

y = v[0]

sum = 0

q = 6 + 52 // (n + 1)

while q > 0:

sum = (sum + _DELTA) & 0xffffffff

e = sum >> 2 & 3

for p in xrange(n):

y = v[p + 1]

v[p] = (v[p] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff

z = v[p]

y = v[0]

v[n] = (v[n] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff

z = v[n]

q -= 1

return _long2str(v, False)

def decrypt(str, key):

if str == '': return str

v = _str2long(str, False)

k = _str2long(key.ljust(16, "\0"), False)

n = len(v) - 1

z = v[n]

y = v[0]

q = 6 + 52 // (n + 1)

sum = (q * _DELTA) & 0xffffffff

while (sum != 0):

e = sum >> 2 & 3

for p in xrange(n, 0, -1):

z = v[p - 1]

v[p] = (v[p] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff

y = v[p]

z = v[n]

v[0] = (v[0] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff

y = v[0]

sum = (sum - _DELTA) & 0xffffffff

return _long2str(v, True)

if __name__ == "__main__":

print decrypt(encrypt('Hello XXTEA!', '16bytelongstring'), '16bytelongstring')

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

python编写登录脚本_python实现的登录和操作开心网脚本分享相关推荐

  1. python写一个自动登录脚本_Python 实现自动登录+点击+滑动验证功能

    需要用到的库有selenium,还需要安装Chrome浏览器驱动,具体如何安装我就不详述了 在这里我模拟了csdn的登录过程 ** 1**.首先打开网页,用户名+密码登录,然后定位用户名输入框,和密码 ...

  2. python写一个自动登录脚本_python实现自动登录

    利用python,可以实现填充网页表单,从而自动登录WEB门户. (注意:以下内容只针对python3) 环境准备: (1)安装python (2)安装splinter,下载源码 python set ...

  3. python编写异常处理_Python 简明教程 --- 23,Python 异常处理

    要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...

  4. python编写图像识别_python实现识别相似图片小结

    文章简介 在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能 ...

  5. python 抢购小米_Python(Tornado)模拟登录小米抢手机

    今天看到同事参与小米的抢购,几经数个星期的尝试,终于抢到了一台小米电视--看了一下小米的抢购流程,似乎可以用程序可破.于是想写点东西玩玩(你懂的--),第一步肯定是先得模拟登录小米帐号,当练手吧. 用 ...

  6. python discuz验证码_python实现自动登录discuz论坛

    最近被公司的事情搞的很纠结,博客也有段时间没写了,不过最近还是忙里偷闲做了点其他事情,在这里记录下来,和大家分享一下. 需求也比较简单,老婆是做社区运营的,所以需要每天把几个帖子定时的顶上来,手工做很 ...

  7. python编写递归函数_Python递归函数如何写?正确的Python递归函数用法!

    在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 一.举个例子,我们来计算阶乘n! = 1 x 2 x 3 x - x n,用函数fact(n)表示,可以看出: f ...

  8. python编写函数_python函数式编程

    函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...

  9. python编写赛车_python udp 协议发送接收秒速赛车平台搭建数据

    python udp 协议发送接收秒速赛车平台搭建数据 Socket socket 简称套接字, 秒速赛车平台搭建 [企鹅 217-1793-408] 是进程间通信的一种方式. 与其他的方式的进程间的 ...

  10. 用python编写名片_python实现简单名片管理系统

    前言 之前看过一遍的python教程,真的是自己看过一遍,python的程序能看懂,但是很难去实现.比较困难的自己实现一些代码,找工作原因,自己又认认真真的看书,敲代码,后来看到了这个题目,想把之前学 ...

最新文章

  1. 【动态规划】硬币问题
  2. 使用云祺虚拟机备份软件恢复Citrix XenServer 虚拟机
  3. android顶部横线动态导航
  4. Android 自定义Dialog背景透明及显示位置设置
  5. java barcode api_使用JavaBean API 嵌入Barcode4J到Java应用程序
  6. 单片机用python还是c语言_单片机为什么一直用C语言,不用其他编程语言?
  7. 1002. 写出这个数 (20)
  8. java最接近对点及距离_最接近点对问题_分治法
  9. Intelli IDEA 快捷键操作,咱来点不一样的
  10. php new static 效率,对比 PHP 中 new static() 与 new self()
  11. python怎么读取excel-Python|读、写Excel文件(三种模块三种方式)
  12. 程序执行系统VC++程序出现“试图执行系统不支持的操作”
  13. softmax ce loss_从Softmax到AMSoftmax(附可视化代码和实现代码)
  14. 计算机专业英语词汇缩写,计算机专业英语词汇中英文对照其他缩写,外语网
  15. 大专生三面蚂蚁金服,王道训练营java百度云盘
  16. 中兴 ZXV10 B860AV2.1-A 中国移动盒子 开adb和wifi(海南盒子);适用于大部分(除两款外)不打开adb 进行安装软件或抓取日志
  17. 常见的VPS主机运维面板汇总—网站运维面板
  18. 【实用网址】:平常用不到,想用的时候找不到
  19. Unity鼠标控制相机上下左右环视360度旋转(Quaternion.AngleAxis)
  20. 禁止页面在浏览器中打开 只能在微信内核浏览器中打开

热门文章

  1. meri oracle view_Oracle Siebel CRM
  2. linux命令scp(复制文件和目录)详解及cp和scp命令的使用方法
  3. 菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(三)(代码分析)
  4. C#打开文件夹加载图片
  5. 智慧城市将成为推进我国新型城镇化的新思路、新手段、新模式
  6. 从EDN上看的文章 如何提高手机的待机时长
  7. oracle的显示和隐式,oracle的显式受权和隐式授权(转)
  8. 2016最新php授权验证系统v2.1,2016PHP受权验证系统V2.1完整版,域名+IP双重验证 一键升级受权系统 完美无错...
  9. SAP SEGW 事物码里的 ABAP 类型和 EDM 类型映射的一个具体例子
  10. 北大人工智能前沿讲座--第二讲 嵌入式人工智能