python中验证是否登录成功的方法:
#!/usr/bin/envpython #-*-coding:gbk-*- importurllib importurllib2 importClientCookie importre importstring importtime importsocket timeout=10 server="www.juyimeng.com" loginurl="http://"+server+"/login.php" v_account=[ {"name":"user1","pass":"pass1","utype":"1","vkey":"用户1"}, {"name":"user2","pass":"pass2","utype":"2","vkey":"用户2"} ] deffes_write(s): ''' 控制输出信息的显示 ''' prints defget_response(x): ''' 登录,取得登陆后的页面html代码,用来判断结果 ''' fes_write("loginfor"+x["name"]) eform={'username':x["name"],'password':x["pass"],'usertype':x["utype"]} qstring=urllib.urlencode(eform) #printqstring try: request=urllib2.Request(loginurl,qstring) response=ClientCookie.urlopen(request) returnstring.split(response.read(),"\n") exceptException,e: fes_write(e) return"error" defverify_info(k,l): ''' 校验信息是否正确 ''' forlineinl: ifk.match(line): returnTrue break returnFalse defverify_all(): ''' 主程序,进行校验 ''' iftimeout!=0: socket.setdefaulttimeout(timeout) fes_write("sockettimeout:"+str(socket.getdefaulttimeout())) success_num=len(v_account) forxinv_account: vkey=re.compile('.*'+x["vkey"]+'.*') ifverify_info(vkey,get_response(x))==True: success_num=success_num-1 fes_write(x["name"]+"loginsuccess!") else: fes_write("errorwhen"+x["name"]+"login!") ifsuccess_num==0: fes_write("allthingsrunswell!") else: e_notify() fes_write("somethingiswrong!") defe_notify(): ''' 出错之后的notify操作 ''' pass if__name__=='__main__': verify_all()
v_account定义了多个账户,因为用户可能不同,后台机制不一样,所以用多个用户来登录
request = urllib2.Request( loginurl , qstring ) 用的是post的方法,也可以用get的方法。
ClientCookie,一个python的扩展包
2个v_account里的vkey用来和登陆后的页面上的信息来验证是否正常登录的
socket.setdefaulttimeout用来设置建立socket连接的超时设置,原来没有设置,程序会一直等待回应(如果服务器端做了最长运行时间会好点),设置了10秒,如果一个登录程序10秒还没有成功,基本上就失败了。
e_notify:可以自己设置一些notify的方法,比如邮件,短消息等。
原文来自:https://www.py.cn© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容