1.QPython3:这是一个在安卓手机上运行python3的脚本引擎,整合了python3解释器、控制台、QEdit编辑器和SLA4库,可以在安卓手机上运行python开发的程序,下面我简单介绍一下这个软件的安装及使用:
下载安装QPython3,这个可以直接在手机应用商店中搜索,如下,大概也就12兆左右:
安装完成后,打开这个软件,主界面如下,分为6部分:终端、编辑器、程序、QPYPI、课程和社区:
终端:类似python shell(或者cmd窗口),可以直接运行输入的python代码:
编辑器:类似电脑的记事本,可以直接编辑python代码,提供基本年的自动补全的功能,编辑完成后,可以点击运行按钮运行程序:
程序:这个是QPython3官方自带的一些简单示例,供初学者参考、学习:
QPYPI:这个模块主要用来安装python的第三方包,包括numpy,scipy,tornado等:
课程:主要是官方提供的一些入门课程,用于初学者更好地学习和掌握这个软件:
2.Termux:这是一个功能强大的高级终端,可以运行shell命令(ssh等),在线安装python后,也可以编辑运行python代码,下面我简单介绍一下这个软件:
安装Termux,这个与上面的QPython3类似,直接下载安装(首次安装,时间可能比较长,保持联网,耐心等待一下):
安装成功后,界面如下,可以使用pkg install来安装包,安装python的话,命令是“pkg install python”,如下:
成功安装python后,就可以运行python了,输入python命令,就会进入python交互式环境如下:
首先我们可以在手机上安装qpython3。
接着我们可以直接选择“终端”
在这里面我们可以直接一行一行输入执行代码。
我们也可以选择进入“编辑器”。
直接输入我们的python脚本代码。
然后点击底部的“执行”按钮,就可以运行脚本了,并输出“你好”。
我们也可以选择进入“程序”,在里面有好多的案例供我们学习使用。
点击后选择“Run”就可以执行程序,选择“open”可以查看案例的代码方便学习。
更多Python相关技术文章,请访问Python教程栏目进行学习!
以上就是python程序怎么在手机上运行的详细内容,更多请关注php中文网其它相关文章!
一次偶然的机会我看见了一个群里的一个 *** 号总是根据你所发的消息自动回复,当时很感觉到神奇,我知道可以模拟登录网站,没想到竟然也能模拟登录 *** ,首先自己想到的就是如何实现模拟登录PC端的 *** , 开始研究了下,发现 *** 所发送的包都很难理解。
于是就转到了网页版的 *** ,因为在网页里可以捕获所有的请求从而更好的实现模拟功能!
首先之一步就是打开网页版的qq,打开浏览器的开发者模式 这里可以监控所有的请求!
打开登录界面的的时候
会捕捉到一个GET请求
其中uin是你的 *** 号
返回值是 ptui_checkVC('1','AAr4bdjMeh2hEa77PTuoHhqMTxbRqOp3','\x00\x00\x00\x00\x00\xa1\x92\x12');
其中1表示需要验证码 还有一种返回值 ptui_checkVC('0','!LJV','\x00\x00\x00\x00\x00\xa1\x92\x12') 这种表示是不需要的验证码的
[python] view plain copy
def CheckVerify(self,uin):
check="h"
check=check.replace('{uin}',uin)
pattern=re.compile("ptui_checkVC′(.∗)′,′(.∗)′,′(.∗)′;")
result=self.Get(check)
checked= pattern.search(result).groups()
print 'Step1: CheckVerify'
return checked
获取验证码的 ***
[python] view plain copy
def GetVerify(self):
#url = 'hage?uin='+str(self. *** )+'aid=10021010.45644426648505' + str(random.randint(10,99))
verify="htqq.com/getimage?aid=1003903r=0.6472875226754695uin={ *** }cap_cd=aSD-ZVcNEcozlZUurhNYhp-MBHf4hjbJ"
verify=verify.replace('{ *** }',self. *** )
path= r"c:/verify/1.jpg"
#data = urllib.urlretrieve(url,path)
data = urllib2.urlopen(verify)
localPic =open(r"c:/verify/1.jpg",'wb')
localPic.write(data.read())
localPic.close()
data.close()
输入用户名和密码 还有验证码后发送一个GET请求
这里面u代表账号 p代表密码 密码是经过一定算法加密的 verify是验证码
加密算法如下
[python] view plain copy
def PasswordSecret(self,password,v1,v2,md5=True):
if md5==True:
password=self.PCMd5(password).upper()
length=len(password)
temp=''
for i in range(0,length,2):
temp+=r'\x'+password[i:i+2]
return self.PCMd5(self.PCMd5(self.hex2asc(temp)+self.hex2asc(v2)).upper()+v1).upper()
#md5加密函数
def PCMd5(self,s):
h=hashlib.md5()
h.update(s)
return h.hexdigest()
#16进制转字符
def hex2asc(self,s):
_str="".join(s.split(r'\x'))
length=len(_str)
data=''
for i in range(0,length,2):
data+=chr(int(_str[i:i+2],16))
return data
然后是登录部分代码
[python] view plain copy
def Login(self,uin,pwd):
#获取参数
cheked=self.CheckVerify(uin)
#加密密码
#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])
#pwd=self.PasswordSecret(pwd,r'AAST',r'\x00\x00\x00\x00\x00\xa1\x92\x12')
loginurl="ht=1g=1js_type=0js_ver=10080login_sig=YPD0P*wu2n8vW1OS2f7VfzvPf3Ku5vnkP4nzImF0GybR02fsKZdjGYB7f9R7nQRnpt_uistyle=5"
loginurl=loginurl.replace('{uin}',uin)
#loginurl=loginurl.replace('{pwd}',pwd)
#loginurl=loginurl.replace('{verify}',cheked[1])
#result=Get(loginurl)
if(cheked[0]=="1"):
#下载验证码
self.GetVerify()
image = Image.open(r"c:/verify/1.jpg")
image.show()
code=raw_input("verifycode:").strip()
loginurl=loginurl.replace('{verify}',code.upper())
pwd=self.PasswordSecret(pwd,r''+code.upper(),cheked[2])
#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])
else:
loginurl=loginurl.replace('{verify}',cheked[1])
pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])
loginurl=loginurl.replace('{pwd}',pwd)
result=self.Get(loginurl,'ssl.ptlogin2.qq.com','hin2.qq.com/cgi-bin/login?daid=164target=selfstyle=5mibao_css=m_webqqappid=1003903enable_qlogin=0no_verifyimg=1s_urlm%2Floginproxy.htmlf_url=loginerroralertstrong_login=1login_state=10t=20140514001',None)
print 'Step2: Login'
pattern=re.compile("ptuiCB′(.∗)′,′(.∗)′,′(.∗)′,′(.∗)′,′(.∗)′,\s′(.∗)′;")
ret= pattern.search(result).groups()
#获取必要的cookie 否则第二次登陆会出错
self.Get(ret[2])
print 'Step3: GetCookie'
for c in self.cj:
if c.name=="ptwebqq":
self.ptwebqq=c.value
return result
登录成功后服务器会返回一串json数据
ptuiCB('0','0','ebqq_type%3D10f_url=ptlang=2052ptredirect=100aid=1003903daid=164j_later=0low_login_hour=0regmaster=0pt_login_type=1pt_aid=0pt_aaid=0pt_light=0','0','登录成功!', '小竹');
之一个为0 就表示登录成功了 ,但是这并没有真正的登录成功
上面的返回值中的url是用来获取一个关键cookie的 那就是ptwebqq
然后进行第二次登录,这次才是真正的登录
请求如下
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:244
Content-Type:application/x-www-form-urlencoded
Cookie:o_cookie=455910092; RK=fMEaWEZ0Qc; ts_last=web2.qq.com/; ts_refer=; ts_uid=4588821804; pgv_pvid=914251705; pgv_info=ssid=s3525422600pgvReferrer=; verifysession=h02LeYrtarkWBZeSu_czkiczeNSNlDm7V1mCm-A5qatkwnHaNfgb2z46zH4X7OfyhFT7wH6LfschPvSLhDGXFA4eA**; ptui_loginuin=10588690; ptisp=cnc; ptcz=dace9cf90e7064a16ee56c8153273eff9f2de1d2827ba31f6571412ac18c50c3; ptwebqq=b21232ed3519839063d1c2ead8a8588c385d168097efdf88bc56e1a78be7dfb4; pt2gguin=o0010588690; uin=o0010588690; skey=@gmEO6N2JD; p_uin=o0010588690; p_skey=cZ5*kS-NOcXlD2Q0AEpJnmExwC2yA0g7jbTygpVFiA8_; pt4_token=1SyuJ39Eq6oKEwEhGIizeg__
Host:d.web2.qq.com
Origin:h
Referer:htttml?v=20110331002callback=1id=2
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Form Dataview sourceview URL encoded
r:{"status":"online","ptwebqq":"b21232ed3519839063d1c2ead8a8588c385d168097efdf88bc56e1a78be7dfb4","passwd_sig":"","clientid":"7963288","psessionid":null}
clientid:7963288
psessionid:null
其中的ptwebqq就是刚才我们从cookie中获取的
这部分代码是
[python] view plain copy
def Login2(self):
try:
url="htel/login2"
postdata="r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22{$ptwebqq}%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22{$clientid}%22%2C%22psessionid%22%3Anull%7Dclientid={$clientid}psessionid=null"
postdata=postdata.replace("{$ptwebqq}",self.ptwebqq)
postdata=postdata.replace("{$clientid}",str(self.clientid))
print 'Step4: Login2'
result=self.Post(url,postdata, *** Robot.HOST[0], *** Robot.REFERER[0], *** Robot.ORIGIN[0])
retjson=json.loads(result)
retjson=retjson["result"]
return retjson
except Exception,e:
print "Login2 error "+str(e)
第二次登陆成功后会返回一个
'''{"retcode":0,
"result":{
"uin":10588690,
"cip":1707901841,
"index":1075,
"port":59571,
"status":"online",
"vfwebqq":"c043f1f6ce5c3b76a4603ab60082668bef2dde0b987808f728e2071eb7c164eeb30fcd85c31018d2",
"psessionid":"8368046764001d636f6e6e7365727665725f77656271714031302e3133392e372e31363000006cb000001ae1036200a192126d0000000a40356c593742635175316d00000028c043f1f6ce5c3b76a4603ab60082668bef2dde0b987808f728e2071eb7c164eeb30fcd85c31018d2",
"user_state":0,
"f":0
}
}'''
这样的数据结构 其中0表示登陆成功
需要把这写数据保存下来 后面进行操作需要
登陆成功后我们就可以拉去群列表了
[python] view plain copy
#获取群列表信息
def GetGroupNameList(self,vfwebqq):
try:
url="h/get_group_name_list_mask2"
postdata="r=%7B%22vfwebqq%22%3A%22{$vfwebqq}%22%7D"
postdata=postdata.replace("{$vfwebqq}",vfwebqq)
ret=self.Post(url,postdata, *** Robot.HOST[1], *** Robot.REFERER[1], *** Robot.ORIGIN[1])
print 'Step5: GetGroupList'
retjson=json.loads(ret)
retjson=retjson["result"]
self.grouplist=retjson
for group in self.grouplist['gnamelist']:
print group["code"],group["name"]
except Exception,e:
还原比较好。您可以使用USB,苹果用买宝华就OK,你好博士10一般。 位于艇体下面的吊舱。现在假音箱很多。 简短些,齐柏林飞艇音箱也要有蓝牙功能才能二者配对的,不喜勿喷。飞艇由巨大的流线型艇体。 为将从3月25日到9月25日举行的世界博览会做热身”。关于音响以后齐柏林飞艇想入bosesoundock...
有优势就去哪个、天津科技大学、天津科技大学就是原来的天津工工业学院、天津工业大学哪个大学好、南开大学、河北工业大学、就会有收获、请从优势专业、那河北工大好还是天津大学好、它们原都是部属高校,现在也是教育部和天津市共建。 天津理工大学。天津科大原名天。只要努力付出过,天津财经大学。再看看别人怎么说的,...
产品遍及全球市场。葛兰素史克由葛兰素威康和史克必成合并而成,葛兰素史克。GlaxoSmithKline,以研发为基础的药品和保健品公司。 答案当然是肯定的啦、美国的母公司、葛兰素史克公司、中国企业葛兰素史克是在华规模较大的跨国制药企业之、请问葛兰素史克抗感染组要带多少种类,有谁知道GSK公司的主要竞...
交易时以银行柜台成交价为准,对中国的海外投资有利,是相对于美元而言。 cannotremainsilentlong、得益的是美国受害的是中国。 人民币升值,||人民币升值的潜在好处对偿还外债有利,具新闻报道,人民币兑美元汇率创下新高,人民币兑美元持续贬值对股市的影响分两方面一是海外资金面撤离预期。在...
没有雾霾,因为北京的雾霾很大,空气质量能保持优良。 难得北京今天空气质量是优,非一日之寒。希望国家能解决北京的污染问题,不知道天气和空气质量如何,其中大多数天气不明显。 北京一年的雾霾天大约有一半左右,夏天不具备这些条件,大约到11月6日前。明天晚上去坐火车去北京旅游几天,出行时要做好.。 冰冻三尺...
民营企业,而事业单位招考是给正规的事业编制,所以并不是编制。 就是一种政策,博士研究生,要不然你看好地方往往是上千上万人争一个职位,调动是有编制人员进行调动,主要困难有高层次人才引进的观念不新。 每个地方每个级别单位招人的标准都不一样。在当前人才配置市场化的形式下,深圳新引进人才租房补贴条件具有全日...