將上面的代碼重構了一下,并且添加了cookies,這樣我們就不需要每次登陸了
1
#!/usr/bin/python
2
# -*- coding: UTF-8 -*-
3
4
import urllib
5
import cookielib, urllib2
6
import os
7
import re
8
9
class 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頁面,獲取用戶相應的信息
38
"""
39
print '解析html頁面,獲取服務器端返回的內容'
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文件的數據
62
63
if contents[0]=='n':
64
c = raw_input('是否采用提交當天日志(y/n)?:')
65
if c=='n':
66
self.fillInDate = raw_input('請輸入提交日期(格式yyyy-mm-dd):')
67
projectId = raw_input('項目名稱代碼:')
68
workId = raw_input('具體事項:')
69
workContent = raw_input('工作內容:')
70
workNum = raw_input('正常工作時長:')
71
overtimeNum = raw_input('加班工作時長:')
72
else:
73
74
#是否采用文件中的時間,如果不采用,則采用當前時間
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
#拼湊參數 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
114
if __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頁面,獲取服務器端返回的內容
['\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
開始提交日報
日報填寫成功