躺在沙灘上的小豬

          快樂的每一天

          自由的python 二

          將上面的代碼重構(gòu)了一下,并且添加了cookies,這樣我們就不需要每次登陸了

            1#!/usr/bin/python
            2# -*- coding: UTF-8 -*-
            3
            4import urllib
            5import cookielib, urllib2
            6import os
            7import re
            8
            9class Fun:
           10    def __init__(self,username,password,times=1,\                  dataFileName='fun.data',loginurl='',posturl='',\                  proxies={},pform=None,cookies=None):
           11        print '初始化'
           12        self.username=username
           13        self.password=password
           14        self.times = times
           15        self.loginurl=loginurl
           16        self.posturl = posturl
           17        self.proxies=proxies
           18        self.pform=pform        
           19        self.dataFileName=dataFileName
           20        self.cookies=cookielib.CookieJar()
           21        self.opener=None
           22    
           23    def login(self):    
           24        """
           25            登陸
           26        """        
           27        print '登陸'
           28        loginparams = urllib.urlencode({'j_username':self.username,\                                                'j_password':self.password,\
           29                                                                            'UPC_REQUEST_URI':'*.do',\                                                'UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'}) 
           30        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
           31                        
           32        self.pform = self.opener.open(self.loginurl,loginparams)
           33        print '登陸成功'
           34                        
           35    def post(self):
           36        """
           37            解析登陸完成的HTML頁面,獲取用戶相應(yīng)的信息
           38        """    
           39        print '解析html頁面,獲取服務(wù)器端返回的內(nèi)容'
           40        content = '\n'.join(self.pform.readlines())            
           41        items = ["employeeName","department","workArea","workCity","fillInDate"]
           42        values = []
           43        for item in items:
           44            pattern = "name=\""+item+"\"\s*(size=\"\d*\")?\s*\                                    value=\"(\S*(\s*\S*)?)\"\s*id=\""+item+"\""
           45            matcher = re.search(pattern,content)
           46            
           47            if matcher!=None:        
           48                values.append(matcher.groups()[1])
           49                print values
           50            else:
           51                values.append('')
           52        print '解析完成'                
           53        """
           54            提交日報
           55        """        
           56                
           57        print '讀取data文件:'+self.dataFileName
           58        f = open(self.dataFileName)
           59        contents = f.readlines()
           60        
           61        #讀取data文件,判斷是否采用交互界面,還是采用data文件的數(shù)據(jù)    
           62        
           63        if contents[0]=='n':                    
           64            c = raw_input('是否采用提交當(dāng)天日志(y/n)?:')
           65            if c=='n':
           66                self.fillInDate = raw_input('請輸入提交日期(格式y(tǒng)yyy-mm-dd):')        
           67            projectId = raw_input('項(xiàng)目名稱代碼:')
           68            workId = raw_input('具體事項(xiàng):')
           69            workContent = raw_input('工作內(nèi)容:')
           70            workNum = raw_input('正常工作時長:')
           71            overtimeNum = raw_input('加班工作時長:')
           72        else:
           73            
           74            #是否采用文件中的時間,如果不采用,則采用當(dāng)前時間
           75            if contents[1]=='y':                
           76                self.fillInDate = contents[2]
           77            
           78            projectId = contents[3]
           79            workId = contents[4]
           80            workContent = contents[5]
           81            workNum = contents[6]
           82            overtimeNum = contents[7]
           83        
           84        #拼湊參數(shù)     o_o
           85        paramsmap = {'employeeId':self.username,\                         'employeeName':values[0],\
           86             'department':values[1],\             'workArea':values[2],\             'workCity':values[3],\             'fillInDate':values[4],\
           87             'detailList.projectId':[projectId],\             'detailList.workId':[workId],\
           88             'detailList.workContent':[workContent],\             'detailList.workNum':[0],             'detailList.overtimeNum':[8]}
           89        
           90        keys = paramsmap.keys()
           91        for key in keys:
           92            print key,':',paramsmap[key]
           93        
           94        postparams = urllib.urlencode(paramsmap)
           95        print    'postparams:'+postparams    
           96        #提交
           97        #opener = urllib2.build_opener(self.cookies)       
           98        print '開始提交日報'
           99        result = self.opener.open(self.posturl,postparams)
          100        #result = urllib2.urlopen(posturl,postparams)
          101        #todo:解析提過完成頁面,獲取信息
          102        #        
          103        result.close()
          104        print '日報填寫成功'
          105        
          106    def close(self):
          107        """
          108        """
          109        if not self.pform:
          110            self.pform.close()
          111        
          112
          113
          114if __name__=='__main__':    
          115    #測試一下
          116    try:
          117        test = Fun(username='',password='',loginurl='',posturl = '')
          118        test.login()
          119        test.post()
          120        test.close()
          121    except IOError:        
          122        raise


          初始化
          登陸...
          登陸成功
          解析html頁面,獲取服務(wù)器端返回的內(nèi)容
          ['\xd0\xec\xcf\xe9\xbe\xfc']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9', '\xbb\xaa\xb6\xab']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9', '\xbb\xaa\xb6\xab', '\xc4\xcf\x
          be\xa9']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9', '\xbb\xaa\xb6\xab', '\xc4\xcf\x
          be\xa9', '2005-09-24 17:45:40.0']
          解析完成
          讀取data文件:fun.data
          detailList.workId : ['10003102\n']
          employeeId : 404
          workCity : 南京
          detailList.projectId : ['JX0001\n']
          detailList.overtimeNum : [8]
          detailList.workNum : [0]
          detailList.workContent : ['\xbb\xfc\xb2\xe9\xd0\xe8\xc7\xf3\xb7\xd6\xce\xf6\n']
          fillInDate : 2005-09-24 17:45:40.0
          department : 南京
          workArea : 華東
          employeeName : 徐祥軍
          postparams:detailList.workId=%5B%2710003102%5Cn%27%5D&employeeId=404&workCity=%C
          4%CF%BE%A9&detailList.projectId=%5B%27JX0001%5Cn%27%5D&detailList.overtimeNum=%5
          B8%5D&detailList.workNum=%5B0%5D&detailList.workContent=%5B%27%5Cxbb%5Cxfc%5Cxb2
          %5Cxe9%5Cxd0%5Cxe8%5Cxc7%5Cxf3%5Cxb7%5Cxd6%5Cxce%5Cxf6%5Cn%27%5D&fillInDate=2005
          -09-24+17%3A45%3A40.0&department=%C4%CF%BE%A9&workArea=%BB%AA%B6%AB&employeeName
          =%D0%EC%CF%E9%BE%FC
          開始提交日報
          日報填寫成功

          posted on 2005-09-24 18:22 martin xus 閱讀(572) 評論(5)  編輯  收藏 所屬分類: python

          主站蜘蛛池模板: 九台市| 墨竹工卡县| 临武县| 汝南县| 张家港市| 陕西省| 尼木县| 三门峡市| 鄂州市| 铁岭市| 云龙县| 白山市| 洛南县| 兴化市| 化德县| 炎陵县| 西宁市| 南康市| 同仁县| 韶山市| 房产| 丰城市| 静海县| 同江市| 盐边县| 永清县| 闸北区| 广丰县| 贺州市| 六盘水市| 东光县| 福海县| 双柏县| 喀什市| 朔州市| 扎赉特旗| 辉南县| 永清县| 甘洛县| 两当县| 资兴市|