• 技术文章 >常见问题 >Python常见问题

    python3.7怎么验证是否登录成功?

    yangyang2020-05-30 10:08:31原创3289

    python中验证是否登录成功的方法:

    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

    #!/usr/bin/env python

    # -*- coding: gbk -*-

    import urllib

    import urllib2

    import ClientCookie

    import re

    import string

    import time

    import socket

    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"}

    ]

    def fes_write(s):

        '''

        控制输出信息的显示

        '''

        print s

    def get_response(x):

        '''

        登录,取得登陆后的页面html代码,用来判断结果

        '''

        fes_write("login for "+ x["name"])

        eform = {'username':x["name"], 'password':x["pass"], 'usertype':x["utype"]}

        qstring = urllib.urlencode( eform )

        #print qstring

        try:

            request = urllib2.Request( loginurl , qstring )

            response = ClientCookie.urlopen( request )

            return string.split( response.read(),"\n")

        except Exception, e:

            fes_write(e)

            return "error"

    def verify_info(k,l):

        '''

        校验信息是否正确

        '''

        for line in l:

            if k.match(line):

                return True

                break

        return False

    def verify_all():

        '''

        主程序,进行校验

        '''

        if timeout!=0:

            socket.setdefaulttimeout(timeout )

        fes_write("socket time out: " + str(socket.getdefaulttimeout()))

        success_num=len(v_account)

        for x in v_account:

            vkey=re.compile('.*'+x["vkey"]+'.*')

            if verify_info(vkey,get_response(x))==True:

                success_num=success_num-1

                fes_write(x["name"]+ " login success!")

            else:

                fes_write("error when " + x["name"]+ "login!")

        if success_num==0:

            fes_write("all things runs well!")

        else:

            e_notify()

            fes_write("some thing is wrong!")

             

    def e_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的方法,比如邮件,短消息等。

    更多Python知识请关注Python自学网

    专题推荐:python
    上一篇:python3.8随机数怎么生成? 下一篇:python3.7 idle怎么安装

    相关文章推荐

    • python3过大数据如何读取?• python3安装库后不能用怎么解决?• python的模块保存在哪?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网