将上面的代码重构了一下,并且添加了cookies,这样我们就不需要每次登陆了
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页面,获取用户相应的信息
38 """
39 print '解析html页面,获取服务器端返回的内容'
40 content = ' '.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
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页面,获取服务器端返回的内容
['xd0xecxcfxe9xbexfc']
['xd0xecxcfxe9xbexfc', 'xc4xcfxbexa9']
['xd0xecxcfxe9xbexfc', 'xc4xcfxbexa9', 'xbbxaaxb6xab']
['xd0xecxcfxe9xbexfc', 'xc4xcfxbexa9', 'xbbxaaxb6xab', 'xc4xcfx
bexa9']
['xd0xecxcfxe9xbexfc', 'xc4xcfxbexa9', 'xbbxaaxb6xab', 'xc4xcfx
bexa9', '2005-09-24 17:45:40.0']
解析完成
读取data文件:fun.data
detailList.workId : ['10003102
']
employeeId : 404
workCity : 南京
detailList.projectId : ['JX0001
']
detailList.overtimeNum : [8]
detailList.workNum : [0]
detailList.workContent : ['xbbxfcxb2xe9xd0xe8xc7xf3xb7xd6xcexf6
']
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
开始提交日报
日报填写成功
相关推荐
2. **运动控制算法**:六自由度平台的每个轴都需要独立的控制信号,这涉及到PID(比例-积分-微分)控制、滑模控制等经典控制理论。Python可以方便地实现这些算法,如`scipy`库中的优化和控制工具。 3. **实时性**:...
六自由度机械臂上位机python代码(带详细注释)(型号为AR3) 其中可实现正逆运动学运算、各种轨迹规划。
在本文中,我们将深入探讨如何使用树莓派与PCA9685驱动器来控制996R舵机,以及如何通过Python和C语言编写代码实现这一目标。PCA9685是一款I2C接口的16通道脉宽调制(PWM)驱动器,非常适合用于精确控制舵机和其他...
在 Python 中直接加载和操作 Live2D 模型,不通过 Web Engine 等间接方式进行渲染,提供更高的自由度和拓展性。 使用 Python C API 将 Live2D Native SDK 封装为 Python 库,理论上可以在任意基于 OpenGL 的窗口上...
5. **上下文**:Jinja2中的上下文是模板渲染时使用的变量集合,这些变量可以在模板中自由访问。 6. **沙盒模式**:为了提高安全性,Jinja2支持沙盒模式,限制了模板中可以使用的部分Python功能,防止恶意用户通过...
项目以树莓派3B+为嵌入式计算平台,与CSI摄像头、二自由度旋转云台结合,主体使用Python和PHP编程,应用I2C通信与OpenCV等前沿技术,通过Frp内网穿透打通内外网数据传输,实现具有远程实时视频监控、运动检测及画面...
你可以自由地从 Python 官方点: http://www.python.org,以源代码或二进制形式获取 Python 解释器及其标 准扩展库,并可以自由的分发。此站点同时也提供了大量的第三方 Python 模块、程序和工具,及其附加文 档。 你...
四自由度机械臂(python源码+项目说明).zip四自由度机械臂(python源码+项目说明).zip四自由度机械臂(python源码+项目说明).zip四自由度机械臂(python源码+项目说明).zip四自由度机械臂(python源码+项目说明...
对于开源项目,如IronPython,LICENSE文件通常是GPL、MIT或Apache等开源许可协议,允许用户自由地使用和修改代码。 2. **README.md**: 这是项目的重要文档,包含了关于IronPython.2.7.8的基本信息,如安装指南、...
- 自由且开放:Python作为FLOSS的一部分,用户可以自由地使用、修改和分发,拥有庞大的社区支持。 - 可扩展性:Python可以和C、C++等语言编写的模块进行混合编程,允许关键部分用更高效的语言实现,同时保持大部分...
一旦Python API被暴露给JavaScript,我们就可以在JavaScript代码中自由地调用它们。例如: ```javascript var result = pythonApi.pythonFunction("World"); console.log(result); // 输出 "Hello, World!" ``` 这...
Python是开源的,用户可以自由地分发、修改和使用它的源代码。 Python 3.x与Python 2.x之间存在显著差异,尽管有一些兼容性工具可以帮助转换代码,但它们并不完全兼容。例如,`print`语句在Python 2.x中直接输出...
Python-GmSSL项目选择了对商业应用友好的类BSD开源许可证,这意味着企业可以自由地使用、修改和分发这个库,即使是在闭源的商业软件中。这种许可证鼓励了代码的广泛采用和贡献,同时也保障了使用者的权益。 使用...
这样做的好处在于,你可以自由地使用SQL的所有复杂性,如联接、子查询、窗口函数等,而无需担心Python ORM的抽象层可能带来的限制。此外,Snaql Raw QL还提供了安全的参数绑定,以防止SQL注入攻击。 安装Snaql Raw ...
《Think Python》英文原版二是一本非常适合Python编程初学者的教材。本书由Allen Downey编著,强调了计算机科学的思维方式,以指导读者学会像计算机科学家一样思考问题。 书中首先会介绍一些编程基础概念,给出清晰...
在每个项目中创建一个独立的环境,可以自由地安装特定版本的Python和库,而不会影响全局安装。 **Python学习资源** Python拥有丰富的学习资源,包括官方文档、在线教程、社区论坛(如Stack Overflow)和各种开源...
Python 是纯粹的自由软件,源代码和解释器 CPython 遵循 GPL(GNU General Public License) 协议。Python 具有丰富和强大的库,能够把用其他语言制作的各种模块(尤其是 C/C++ )很轻松地联结在一起。 Python 的优点...
例如,一行代码`x = 2`即可同时定义并赋值,极大地减少了代码量,提高了编写效率。这种简洁性不仅使得代码更易于阅读,也使得调试和维护变得更加容易。 Python的列表推导式、字典和集合等数据结构,也为数据操作...
Python是一款开源软件,这意味着任何人都可以自由使用、分发、阅读和修改其源代码。这种开放性促进了社区的发展和技术的进步,Python社区非常活跃,不断为语言添加新功能和完善现有功能。 **1.3 可移植性** Python...
程的自由图书。它以教材与指南的形式为入门者介绍 Python 语言。如果你对电脑知识的了解 仅限于如何保存文本文件的话,那这本书就是为你准备的。 2005 年,沈洁元将本书的 1.20 版引进中国,并完成了全本翻译,将...