问题:
       公司的日报,每天填写的时候总是那么巨慢,都有点恐惧它了!

解决方案:
       让代码帮我们每天定时提交,这样就可以省下精力取吹牛去了*的python o_o
            
    
    
        PythonJ#IE工作C# 

好了,开始吧:
       有两种思路,大概的描述一下如下:
        一:定制一份模板的数据,每个月或者每个星期,让它自己的获取生成相应的数据,并提交.
        二:采用交互的界面,这样就不要打开ie了,每天只要通过命令行就可以搞定.

首先看登陆:

1*的python o_o
            
    
    
        PythonJ#IE工作C# def login(self):    
2*的python o_o
            
    
    
        PythonJ#IE工作C#     """
3*的python o_o
            
    
    
        PythonJ#IE工作C#         登陆
4*的python o_o
            
    
    
        PythonJ#IE工作C#     """        
5*的python o_o
            
    
    
        PythonJ#IE工作C#     loginparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,
6*的python o_o
            
    
    
        PythonJ#IE工作C#                 'UPC_REQUEST_URI':'*.do','UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'})
7*的python o_o
            
    
    
        PythonJ#IE工作C#  
8*的python o_o
            
    
    
        PythonJ#IE工作C#     self.pform = urllib.urlopen(self.url,loginparams)
9*的python o_o
            
    
    
        PythonJ#IE工作C# 


我们需要导入urllib. 传人登陆的参数即可,如上面的loginparams.
调用 

1*的python o_o
            
    
    
        PythonJ#IE工作C# urllib.urlopen(url[,params])

执行登陆.

其次:解析登陆完毕,从数据库种返回的内容,工号,姓名,部门,单位,地点,等等.
换一种方式也就是说,运用regex在html种解析,得到数据库范户的数据.

导入我们需要的re.

 1*的python o_o
            
    
    
        PythonJ#IE工作C# def parse(self):    
 2*的python o_o
            
    
    
        PythonJ#IE工作C#     """
 3*的python o_o
            
    
    
        PythonJ#IE工作C#         解析登陆完成的HTML页面,获取用户相应的信息
 4*的python o_o
            
    
    
        PythonJ#IE工作C#     """    
 5*的python o_o
            
    
    
        PythonJ#IE工作C#     content = ' '.join(self.pform.readlines())            
 6*的python o_o
            
    
    
        PythonJ#IE工作C#     items = ["employeeName","department","workArea","workCity","fillInDate"]
 7*的python o_o
            
    
    
        PythonJ#IE工作C#     for item in items:
 8*的python o_o
            
    
    
        PythonJ#IE工作C#         pattern = "name=""+item+""s*(size="d*")?s*value="(S*(s*S*)?)""
 9*的python o_o
            
    
    
        PythonJ#IE工作C#         matcher = re.search(pattern,content)
10*的python o_o
            
    
    
        PythonJ#IE工作C#             
11*的python o_o
            
    
    
        PythonJ#IE工作C#         if matcher!=None:        
12*的python o_o
            
    
    
        PythonJ#IE工作C#             self.item = matcher.groups()[1]


regex这一部分,不明白,可以参考这里http://docs.python.org/lib/module-re.html*的python o_o
            
    
    
        PythonJ#IE工作C# .

好了,下一步就是提交我们的日报:

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


当然,现在的data文件格式比较简单,我们可以做的更实用一点,采用key=value的形式,或者其他.
fun.data的样子如下:

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

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

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