调了一个下午,被python的正则绊住了;在C#上运作好好的式子在python老是报错,原来python的断言式必须是固定长度的,像类似(?<=[^>].*?)的零宽度正回顾后发断言是不允许出现的,这点python做的没有C# 方便,弄得我只好分了好几个步骤来做.

 __author__ = 'wuminye'
import time
import urllib
import urllib2
import cookielib
import re std = ['Queuing', 'Compiling', 'Running'] hostaddr = 'http://acm.hdu.edu.cn'
loginaddr = '/userloginex.php?action=login'
submaddr = '/submit.php?action=submit'
statusaddr = '/status.php' cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
#httpHandler = urllib2.HTTPHandler(debuglevel=1)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
header = {'User-Agent': 'IE10'} def login(username, password):
""" :rtype : object
"""
postData = {'username': username,
'userpass': password,
'submit': 'Sign In'}
postData = urllib.urlencode(postData)
request = urllib2.Request(hostaddr + loginaddr, postData, header)
response = urllib2.urlopen(request, timeout=10)
if response.getcode() != 200 and response.getcode() != 302:
print 'login web error!'
return False
ans = response.read()
if ans.find("Sign Out") == -1:
return False
return True def querystatus():
postData = {'user': 'wuminye',
'lang': 0,
'first': '',
'pid': '',
'status': 0}
postData = urllib.urlencode(postData)
request = urllib2.Request(hostaddr + statusaddr + '?' + postData, headers=header)
response = urllib2.urlopen(request, timeout=10)
if response.getcode() != 200 and response.getcode() != 302:
print 'query web error!'
return False
ans = response.read()
m = re.search('(?<=<td height=22px>).*?</td>(<td.*?</td>){8}(?=</tr>)', ans)
ans = '<td>' + m.group(0)
mylist = []
for i in range(0, 7):
m = re.search(r"(?<=<td).+?(?=</td>)", ans)
t = m.group()[1:]
n = t.find('>')
if n != -1:
t = t[n + 1:]
t = re.search('[^<]+', t)
mylist.append(t.group())
ans = ans[m.end() + 5:]
for i in range(0, 4):
ans = ans[ans.find('>') + 1:]
ans = re.search(r"[^<]+", ans).group()
mylist.append(ans)
return mylist def subbmit(pid, lan, code):
postData = {'problemid': pid,
'language': lan,
'usercode': code,
'submit': 'Submit'}
postData = urllib.urlencode(postData)
request = urllib2.Request(hostaddr + submaddr, postData, header)
response = urllib2.urlopen(request, timeout=10)
if response.getcode() != 200 and response.getcode() != 302:
print 'subbmit web error!'
return False
print 'Subbmit Done!'
ans = querystatus()
while ans[2] in std:
time.sleep(1)
print 'Status:', ans[2]
ans = querystatus()
print ans

[python] HDU自动登录提交代码程序的更多相关文章

  1. Ubuntu启动自动登录并启动程序

    最近在研究Ubuntu,需要在系统启动之后自动登录,并且启动某个程序. 手上拿到的系统只有一个空桌面,其他嘛也没有,鼠标右键也不管用.于是借助自己的虚拟机研究发现,自动启动程序配置文件在: /home ...

  2. python模拟自动登录网站(urllib2)

    不登录打开网页: import urllib2 request = urllib2.Request('http://www.baidu.com') response = urllib2.urlopen ...

  3. Python实现自动登录/登出校园网网关

    学校校园网的网络连接有免费连接和收费连接两种类型,可想而知收费连接浏览体验更佳,比如可以访问更多的网站.之前收费地址只能开通包月服务才可使用,后来居然有了每个月60小时的免费使用收费地址的优惠.但是, ...

  4. Python简单的登录注册代码

    #-*- coding: utf-8 -*- import hashlib # 定义数据库(声明字典) #注册登录的简单hash处理 db={} def get_md5(password): md5= ...

  5. python paramiko自动登录网络设备抓取配置信息

    ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostn ...

  6. Python实现BBS自动登录并发帖

    初学Python有了一段时间,寒假里又看了一些Web编程方面的知识,就写了一个实现bbs自动登录和发帖的Python脚本 由于本人学校BBS站首页使用js加载,貌似通过首页登录不大可行,然后就分析表单 ...

  7. 用python实现自动化登录禅道系统 设置定时器自动执行脚本

    由于各种原因,我想试下用python实现自动登录禅道系统,并且每天定时执行.(本人第一次接触自动化,在大佬眼中门槛都没摸到的类型) 首先缕清思路: 1.实现自动登录禅道系统,用selenium实现2. ...

  8. C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录

    最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户端记录能登录的账户和密码,做到后面实现绕过验证码.动态抓取登录位置等,但由 ...

  9. python selenium模拟登录163邮箱和QQ空间

    最近在看python网络爬虫,于是我想自己写一个邮箱和QQ空间的自动登录的小程序, 下面以登录163邮箱和QQ空间和为例: 了解到在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用, ...

随机推荐

  1. EASYUI DATAGRID 多列复选框CheckBox

    主要实现: 用的 easyui 1.3.2 实现多个复选框列,各列互不影响.能够实现全选.主要部门用红色标记了的. easyui datagrid 初始化: <script> functi ...

  2. Win8增加了快速启动功能......

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-05-11) Win8增加了快速启动功能,能让计算机尽快的启动进入Windows界面.win8的这种快速启动功能只会在“关机 ...

  3. clientTop scrollTop offsetTop

    关于top.clientTop.scrollTop.offsetTop的用法 网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.cli ...

  4. android4.4.2 短信广播变更

    近期三星陆续放出android4.4.2ROM更新包,android4.4.2对短信虽说是放开了权限,但其实是加强了限制,一台手机智能通过一个设置为默认应用的短信应用软件才能发送短信,否则就无法对短信 ...

  5. Android平台上长连接的实现

    Android 平台上长连接的实现 为了不让 NAT 表失效,我们需要定时的发心跳,以刷新 NAT 表项,避免被淘汰. Android 上定时运行任务常用的方法有2种,一种方法用 Timer,另一种是 ...

  6. HTML <base> 标签

    定义和用法 <base> 标签为页面上的所有链接规定默认地址或默认目标. 通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白. 使用 <base& ...

  7. 解决ajax.net 1.0中文乱码问题!

      在使用ajax.net的UpdatePanel的时候,当requestEncoding编码为GB2312的时候,出现乱码.如果要解决这个问题最简单的就是改用utf-8了,但是原来使用GB2312, ...

  8. Java元组Tuple使用实例--转载

    原文地址:http://50vip.com/35.html 一.为什么使用元组tuple? 元组和列表list一样,都可能用于数据存储,包含多个数据:但是和列表不同的是:列表只能存储相同的数据类型,而 ...

  9. LINUX ping 指定网卡

    计算机上有多块网卡(例如笔记本电脑的无线网卡和以太网卡)连接至网络,使用ping命令想指定使用哪块网卡怎么办? ping -I eth0 10.10.10.1ping -I eth1 10.10.10 ...

  10. Python编码相关文章推荐

    Table of Contents 1. 分享 分享 python2里面编码对很多人来说是个很头疼的问题,今天分享一篇编码相关的文章,是前几天读到的相比于大部分解释编码问题的一知半解模糊不清,这篇写得 ...