[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 表单嵌套页面的应用, ...
随机推荐
- 关键词权重计算算法:TF-IDF
TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或 ...
- 使用IBatisNet的网站,修改database.config无效的问题解决
这周五去客户那更新了一个使用了IBatisNet的Web项目,备份了项目.数据库之后,替换更新的文件(含bin目录)却报数据库连接错. 因为是接手的一个维护项目,加上交接有点问题,所以遇到问题只能自己 ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]
三.使用Azure AD管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信息 ...
- 查找DOM
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 30.怎样在Swift中添加运行时属性?
和OC一样,Swift中也可以添加运行时属性.下面将提供一个完整的例子,演示如何给按钮点击事件添加运行时属性. 1.示例 import UIKit var s_GofButtonTouchDownKe ...
- oracle 创建同义词
1.语法: 同义词 (SYNONMY) CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; Create synonym synony ...
- jquery自定义方法
总结: * jQuery中添加自定义或函数方法1,如 $.fn.extend({'aa':function(){}}) 或 jQuery.fn.aa=function(){}, 这种调用时就得这样,$ ...
- 69道java Spring面试题和答案
http://www.jfox.info/69-dao-java-spring-mian-shi-ti-he-da-an 目录 Spring 概述 依赖注入 Spring beans Spring注解 ...
- 怎样解决VirtrualBox不能新建64bit的系统的问题
假设你的VirtrualBox不能新建64bit的虚拟机一般有以下两个原因: 1.电脑是32位的,不支持创建64bit的虚拟机 2.电脑不支持Intel VT-x,或者是Intel VT-x没有打开 ...
- Methods throughout the lifespan of a view controller
Method DescriptionloadView Creates or re ...