自由的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]