yllplay 发表于 2017-4-29 10:12:16

自由的python o_o

  

  问题:
       公司的日报,每天填写的时候总是那么巨慢,都有点恐惧它了!
  解决方案:
       让代码帮我们每天定时提交,这样就可以省下精力取吹牛去了http://localhost:8080/confluence/images/icons/emoticons/smile.gif
  好了,开始吧:
       有两种思路,大概的描述一下如下:
        一:定制一份模板的数据,每个月或者每个星期,让它自己的获取生成相应的数据,并提交.
        二:采用交互的界面,这样就不要打开ie了,每天只要通过命令行就可以搞定.
  首先看登陆:


1http://mmm.iteye.com/Images/OutliningIndicators/None.gifdef login(self):    
2http://mmm.iteye.com/Images/OutliningIndicators/None.gif    """
3http://mmm.iteye.com/Images/OutliningIndicators/None.gif        登陆
4http://mmm.iteye.com/Images/OutliningIndicators/None.gif    """        
5http://mmm.iteye.com/Images/OutliningIndicators/None.gif    loginparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,
6http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'UPC_REQUEST_URI':'*.do','UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'})
7http://mmm.iteye.com/Images/OutliningIndicators/None.gif 
8http://mmm.iteye.com/Images/OutliningIndicators/None.gif    self.pform = urllib.urlopen(self.url,loginparams)
9http://mmm.iteye.com/Images/OutliningIndicators/None.gif
  
我们需要导入urllib. 传人登陆的参数即可,如上面的loginparams.
调用 

1http://mmm.iteye.com/Images/OutliningIndicators/None.gifurllib.urlopen(url[,params])
  执行登陆.
  其次:解析登陆完毕,从数据库种返回的内容,工号,姓名,部门,单位,地点,等等.
换一种方式也就是说,运用regex在html种解析,得到数据库范户的数据.
  导入我们需要的re.


 1http://mmm.iteye.com/Images/OutliningIndicators/None.gifdef parse(self):    
 2http://mmm.iteye.com/Images/OutliningIndicators/None.gif    """
 3http://mmm.iteye.com/Images/OutliningIndicators/None.gif        解析登陆完成的HTML页面,获取用户相应的信息
 4http://mmm.iteye.com/Images/OutliningIndicators/None.gif    """    
 5http://mmm.iteye.com/Images/OutliningIndicators/None.gif    content = '
'.join(self.pform.readlines())            
 6http://mmm.iteye.com/Images/OutliningIndicators/None.gif    items = ["employeeName","department","workArea","workCity","fillInDate"]
 7http://mmm.iteye.com/Images/OutliningIndicators/None.gif    for item in items:
 8http://mmm.iteye.com/Images/OutliningIndicators/None.gif        pattern = "name=""+item+""s*(size="d*")?s*value="(S*(s*S*)?)""
 9http://mmm.iteye.com/Images/OutliningIndicators/None.gif        matcher = re.search(pattern,content)
10http://mmm.iteye.com/Images/OutliningIndicators/None.gif            
11http://mmm.iteye.com/Images/OutliningIndicators/None.gif        if matcher!=None:        
12http://mmm.iteye.com/Images/OutliningIndicators/None.gif            self.item = matcher.groups()[1]
  
regex这一部分,不明白,可以参考这里http://docs.python.org/lib/module-re.htmlhttp://localhost:8080/confluence/images/icons/linkext7.gif.
  好了,下一步就是提交我们的日报:


 1http://mmm.iteye.com/Images/OutliningIndicators/None.gifdef post(self):
 2http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """
 3http://mmm.iteye.com/Images/OutliningIndicators/None.gif            提交日报
 4http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """
 5http://mmm.iteye.com/Images/OutliningIndicators/None.gif        posturl = 'http://host/*.do'
 6http://mmm.iteye.com/Images/OutliningIndicators/None.gif    
 7http://mmm.iteye.com/Images/OutliningIndicators/None.gif        f = open(dataFileName)
 8http://mmm.iteye.com/Images/OutliningIndicators/None.gif        contents = f.readlines()
 9http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
10http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #读取data文件,判断是否采用交互界面,还是采用data文件的数据    
11http://mmm.iteye.com/Images/OutliningIndicators/None.gif        if contents=='n':                    
12http://mmm.iteye.com/Images/OutliningIndicators/None.gif            c = raw_input('是否采用提交当天日志(y/n)?:')
13http://mmm.iteye.com/Images/OutliningIndicators/None.gif            if c!='y':
14http://mmm.iteye.com/Images/OutliningIndicators/None.gif                self.fillInDate = raw_input('请输入提交日期(格式yyyy-mm-dd):')
15http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
16http://mmm.iteye.com/Images/OutliningIndicators/None.gif            projectId = raw_input('项目名称代码:')
17http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workId = raw_input('具体事项:')
18http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workContent = raw_input('工作内容:')
19http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workNum = raw_input('正常工作时长:')
20http://mmm.iteye.com/Images/OutliningIndicators/None.gif            overtimeNum = raw_input('加班工作时长:')
21http://mmm.iteye.com/Images/OutliningIndicators/None.gif        else:
22http://mmm.iteye.com/Images/OutliningIndicators/None.gif            
23http://mmm.iteye.com/Images/OutliningIndicators/None.gif            #是否采用文件中的时间,如果不采用,则采用当前时间
24http://mmm.iteye.com/Images/OutliningIndicators/None.gif            if contents[1]=='y':                
25http://mmm.iteye.com/Images/OutliningIndicators/None.gif                self.fillInDate = contents[2]
26http://mmm.iteye.com/Images/OutliningIndicators/None.gif            
27http://mmm.iteye.com/Images/OutliningIndicators/None.gif            projectId = contents[3]
28http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workId = contents[4]
29http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workContent = contents[5]
30http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workNum = contents[6]
31http://mmm.iteye.com/Images/OutliningIndicators/None.gif            overtimeNum = contents[7]
32http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
33http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #拼凑参数     o_o
34http://mmm.iteye.com/Images/OutliningIndicators/None.gif        postparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,
35http://mmm.iteye.com/Images/OutliningIndicators/None.gif              'UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG',
36http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'employeeId':self.username,'employeeName':self.employeeName,
37http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'department':self.department,'workArea':self.workArea,'workCity':self.workCity,'fillInDate':self.fillInDate,
38http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'detailList.projectId':projectId,'detailList.workId':workId,
39http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'detailList.workContent':workContent,'detailList.workNum':workNum,'detailList.overtimeNum':overtimeNum})    
40http://mmm.iteye.com/Images/OutliningIndicators/None.gif                
41http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #提交
42http://mmm.iteye.com/Images/OutliningIndicators/None.gif        result = urllib.urlopen(posturl,postparams)
43http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #todo:解析提过完成页面,获取信息
44http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #
45http://mmm.iteye.com/Images/OutliningIndicators/None.gif        result.close()
46http://mmm.iteye.com/Images/OutliningIndicators/None.gif
  
当然,现在的data文件格式比较简单,我们可以做的更实用一点,采用key=value的形式,或者其他.
fun.data的样子如下:

y
n
0
JX00001
WK00022
稽查需求分析
0
8

  第一行:是否采用当前data文件数据
第二行:是否采用自定义时间,如果不采用,第三行忽略,如果采用,时间即为第三行的值
第四行,第五行,第六行,日报具体的东西,不谈了.
第七行:正常工作时间
第八行:加班时间
完整代码如下:


  1http://mmm.iteye.com/Images/OutliningIndicators/None.gif#!/usr/bin/python
  2http://mmm.iteye.com/Images/OutliningIndicators/None.gif# -*- coding: UTF-8 -*-
  3http://mmm.iteye.com/Images/OutliningIndicators/None.gif
  4http://mmm.iteye.com/Images/OutliningIndicators/None.gifimport urllib
  5http://mmm.iteye.com/Images/OutliningIndicators/None.gifimport os
  6http://mmm.iteye.com/Images/OutliningIndicators/None.gifimport re
  7http://mmm.iteye.com/Images/OutliningIndicators/None.gif
  8http://mmm.iteye.com/Images/OutliningIndicators/None.gifclass Fun:
  9http://mmm.iteye.com/Images/OutliningIndicators/None.gif    def __init__(self,username,password,times=1,
 10http://mmm.iteye.com/Images/OutliningIndicators/None.gif            dataFileName='fun.data',
 11http://mmm.iteye.com/Images/OutliningIndicators/None.gif            url='http://host/login.ctl',
 12http://mmm.iteye.com/Images/OutliningIndicators/None.gif            proxies={'http': ip:port'},pform=None):
 13http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.username=username
 14http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.password=password
 15http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.times = times
 16http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.url=url
 17http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.proxies=proxies
 18http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.pform=pform
 19http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.employeeName=''
 20http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.department=''
 21http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.workArea=''
 22http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.workCity=''
 23http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.fillInDate=''
 24http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.dataFileName=dataFileName
 25http://mmm.iteye.com/Images/OutliningIndicators/None.gif    
 26http://mmm.iteye.com/Images/OutliningIndicators/None.gif    def login(self):    
 27http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """
 28http://mmm.iteye.com/Images/OutliningIndicators/None.gif            登陆
 29http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """        
 30http://mmm.iteye.com/Images/OutliningIndicators/None.gif        loginparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,
 31http://mmm.iteye.com/Images/OutliningIndicators/None.gif                    'UPC_REQUEST_URI':'*.do','UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'}) 
 32http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.pform = urllib.urlopen(self.url,loginparams)
 33http://mmm.iteye.com/Images/OutliningIndicators/None.gif        self.parse()        
 34http://mmm.iteye.com/Images/OutliningIndicators/None.gif
 35http://mmm.iteye.com/Images/OutliningIndicators/None.gif    def parse(self):    
 36http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """
 37http://mmm.iteye.com/Images/OutliningIndicators/None.gif            解析登陆完成的HTML页面,获取用户相应的信息
 38http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """    
 39http://mmm.iteye.com/Images/OutliningIndicators/None.gif        content = '
'.join(self.pform.readlines())            
 40http://mmm.iteye.com/Images/OutliningIndicators/None.gif        items = ["employeeName","department","workArea","workCity","fillInDate"]
 41http://mmm.iteye.com/Images/OutliningIndicators/None.gif        for item in items:
 42http://mmm.iteye.com/Images/OutliningIndicators/None.gif            pattern = "name=""+item+""s*(size="d*")?s*value="(S*(s*S*)?)""
 43http://mmm.iteye.com/Images/OutliningIndicators/None.gif            matcher = re.search(pattern,content)
 44http://mmm.iteye.com/Images/OutliningIndicators/None.gif            
 45http://mmm.iteye.com/Images/OutliningIndicators/None.gif            if matcher!=None:        
 46http://mmm.iteye.com/Images/OutliningIndicators/None.gif                self.item = matcher.groups()[1]
 47http://mmm.iteye.com/Images/OutliningIndicators/None.gif                        
 48http://mmm.iteye.com/Images/OutliningIndicators/None.gif    def post(self):
 49http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """
 50http://mmm.iteye.com/Images/OutliningIndicators/None.gif            提交日报
 51http://mmm.iteye.com/Images/OutliningIndicators/None.gif        """
 52http://mmm.iteye.com/Images/OutliningIndicators/None.gif        posturl = 'http://host/*.do'
 53http://mmm.iteye.com/Images/OutliningIndicators/None.gif    
 54http://mmm.iteye.com/Images/OutliningIndicators/None.gif        f = open(dataFileName)
 55http://mmm.iteye.com/Images/OutliningIndicators/None.gif        contents = f.readlines()
 56http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
 57http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #读取data文件,判断是否采用交互界面,还是采用data文件的数据    
 58http://mmm.iteye.com/Images/OutliningIndicators/None.gif        if contents=='n':                    
 59http://mmm.iteye.com/Images/OutliningIndicators/None.gif            c = raw_input('是否采用提交当天日志(y/n)?:')
 60http://mmm.iteye.com/Images/OutliningIndicators/None.gif            if c!='y':
 61http://mmm.iteye.com/Images/OutliningIndicators/None.gif                self.fillInDate = raw_input('请输入提交日期(格式yyyy-mm-dd):')
 62http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
 63http://mmm.iteye.com/Images/OutliningIndicators/None.gif            projectId = raw_input('项目名称代码:')
 64http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workId = raw_input('具体事项:')
 65http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workContent = raw_input('工作内容:')
 66http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workNum = raw_input('正常工作时长:')
 67http://mmm.iteye.com/Images/OutliningIndicators/None.gif            overtimeNum = raw_input('加班工作时长:')
 68http://mmm.iteye.com/Images/OutliningIndicators/None.gif        else:
 69http://mmm.iteye.com/Images/OutliningIndicators/None.gif            
 70http://mmm.iteye.com/Images/OutliningIndicators/None.gif            #是否采用文件中的时间,如果不采用,则采用当前时间
 71http://mmm.iteye.com/Images/OutliningIndicators/None.gif            if contents[1]=='y':                
 72http://mmm.iteye.com/Images/OutliningIndicators/None.gif                self.fillInDate = contents[2]
 73http://mmm.iteye.com/Images/OutliningIndicators/None.gif            
 74http://mmm.iteye.com/Images/OutliningIndicators/None.gif            projectId = contents[3]
 75http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workId = contents[4]
 76http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workContent = contents[5]
 77http://mmm.iteye.com/Images/OutliningIndicators/None.gif            workNum = contents[6]
 78http://mmm.iteye.com/Images/OutliningIndicators/None.gif            overtimeNum = contents[7]
 79http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
 80http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #拼凑参数     o_o
 81http://mmm.iteye.com/Images/OutliningIndicators/None.gif        postparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,
 82http://mmm.iteye.com/Images/OutliningIndicators/None.gif              'UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG',
 83http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'employeeId':self.username,'employeeName':self.employeeName,
 84http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'department':self.department,'workArea':self.workArea,'workCity':self.workCity,'fillInDate':self.fillInDate,
 85http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'detailList.projectId':projectId,'detailList.workId':workId,
 86http://mmm.iteye.com/Images/OutliningIndicators/None.gif                'detailList.workContent':workContent,'detailList.workNum':workNum,'detailList.overtimeNum':overtimeNum})    
 87http://mmm.iteye.com/Images/OutliningIndicators/None.gif                
 88http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #提交
 89http://mmm.iteye.com/Images/OutliningIndicators/None.gif        result = urllib.urlopen(posturl,postparams)
 90http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #todo:解析提过完成页面,获取信息
 91http://mmm.iteye.com/Images/OutliningIndicators/None.gif        #
 92http://mmm.iteye.com/Images/OutliningIndicators/None.gif        result.close()
 93http://mmm.iteye.com/Images/OutliningIndicators/None.gif        
 94http://mmm.iteye.com/Images/OutliningIndicators/None.gif    
页: [1]
查看完整版本: 自由的python o_o