[python] HDU自动登录提交代码程序
调了一个下午,被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自动登录提交代码程序的更多相关文章
- Ubuntu启动自动登录并启动程序
最近在研究Ubuntu,需要在系统启动之后自动登录,并且启动某个程序. 手上拿到的系统只有一个空桌面,其他嘛也没有,鼠标右键也不管用.于是借助自己的虚拟机研究发现,自动启动程序配置文件在: /home ...
- python模拟自动登录网站(urllib2)
不登录打开网页: import urllib2 request = urllib2.Request('http://www.baidu.com') response = urllib2.urlopen ...
- Python实现自动登录/登出校园网网关
学校校园网的网络连接有免费连接和收费连接两种类型,可想而知收费连接浏览体验更佳,比如可以访问更多的网站.之前收费地址只能开通包月服务才可使用,后来居然有了每个月60小时的免费使用收费地址的优惠.但是, ...
- Python简单的登录注册代码
#-*- coding: utf-8 -*- import hashlib # 定义数据库(声明字典) #注册登录的简单hash处理 db={} def get_md5(password): md5= ...
- python paramiko自动登录网络设备抓取配置信息
ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostn ...
- Python实现BBS自动登录并发帖
初学Python有了一段时间,寒假里又看了一些Web编程方面的知识,就写了一个实现bbs自动登录和发帖的Python脚本 由于本人学校BBS站首页使用js加载,貌似通过首页登录不大可行,然后就分析表单 ...
- 用python实现自动化登录禅道系统 设置定时器自动执行脚本
由于各种原因,我想试下用python实现自动登录禅道系统,并且每天定时执行.(本人第一次接触自动化,在大佬眼中门槛都没摸到的类型) 首先缕清思路: 1.实现自动登录禅道系统,用selenium实现2. ...
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户端记录能登录的账户和密码,做到后面实现绕过验证码.动态抓取登录位置等,但由 ...
- python selenium模拟登录163邮箱和QQ空间
最近在看python网络爬虫,于是我想自己写一个邮箱和QQ空间的自动登录的小程序, 下面以登录163邮箱和QQ空间和为例: 了解到在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用, ...
随机推荐
- java_web用户的自动登录模块的实现
javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Serializable{ / ...
- 计数排序详解以及java实现
前言 我们知道,通过比较两个数大小来进行排序的算法(比如插入排序,合并排序,以及上文提到的快速排序等)的时间复杂度至少是Θ(nlgn),这是因为比较排序对应的决策树的高度至少是Θ(nlgn),所以排序 ...
- MyEclipse卡死解决
MyEclipse卡死解决 在用[MyEclipse] 写代码很容易卡死机,尤其是在对JSP文件的<%%>之间写代码的时候,只要一弹出智能提示就立刻卡死,程序失去响应,我以为是MyEcli ...
- URAL 1233 - Amusing Numbers
首先计算出k至少为第几位,如果m小于这个数,那么输出0 还有一种情况, 就是10的i次方的这种情况,如果i+1等于m,那么直接输出k,否则输出0 其他的情况,就是二分,然后判断计算其插入到k之前的数的 ...
- JS瀑布流布局模式(2)
这个例子与上一篇类似,唯一的区别是排序的方式有差别.上一篇是在高度最小的列里插入内容,这个案例是按顺序放置内容. 两种方法各有优缺点.第一种需要在图片内容加载完成的情况下有效,各个列的图高度差异不大. ...
- jcmd命令使用
概述 在JDK 1.7之后,新增了一个命令行工具jcmd. 它是一个多功能工具,能够用来导出堆,查看java进程,导出线程信息.运行GC等. 使用演示样例 以下这个命令能够列出当前运行的全部虚拟机: ...
- Commons IO方便读写文件的工具类
Commons IO是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件,url源代码等. 普通地读取一个网页的源代码的代码可能如下 InputStr ...
- Robot Instructions
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- C++ CreateDirectory
创建文件夹 关键点 CreateDirectory The CreateDirectory function creates a new directory. If the underlying fi ...
- progressBarButton
https://github.com/longtaoge/progressBarButton