目前来说思路大概是:把从vj提交的题目代码下载到本地,然后从本地再上传到HDU 获取 getstatus
问题:
1.多个人在vj上交题用一个号如何准确的获取status(打算重写getstatus,用runID搞),并且还要获取代码长度等,突然想起来的
2.从网上下载到本地的txt文件要以何种命名方式准确提交
3.并不会多线程以及操作;
11.7更新内容:
1.用runID处理了查询,先把runID提取出来,再通过runID把后面九个加入队列(还好我养成了清空队列的习惯,不然就GG),再对队列中的第3个(status)进行判断,如果满足return,否则继续,就得到结果了;
2.用二次循环连续提交了两发,也得到了满意的结果,但是目前不清楚,如果对于一个运行时间较多的题会不会出情况,以及网络故障应该加异常,比如submitfalse
3.暂时还没有处理对于CE的情况,不过应该不难,CE处理出一个链接就行了(但是突然想起来,CE的页面是完整的爬下来还是用HDU的,参考一下HUST)
4.还有明天要找两个电脑测试同时交题出现的问题,机器人会不会执行
11.9更新内容:
1.获取CE内容作了处理
# -*- coding: UTF-8 -*-
import re
import requests
import time
from bs4 import BeautifulSoup
class Accept(object):
def __init__(self):
object.__init__(self)
self.session = requests.Session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
}
self.session.headers.update(headers)
def login(self, username, password):
url = 'http://acm.hdu.edu.cn/userloginex.php?action=login'
data = {
'username': username,
'userpass': password,
'login': 'Sign In',
}
headers = {
'host': 'acm.hdu.edu.cn',
'origin': 'http://acm.hdu.edu.cn',
'referer': 'http://acm.hdu.edu.cn/'
}
r = self.session.post(url, data=data, headers=headers)
def getID(self): # 新加功能
status_url = 'http://acm.hdu.edu.cn/status.php?user=zzuliauto2'
while True:
time.sleep(1)
req = self.session.get(status_url)
soup = BeautifulSoup(req.text, 'lxml')
n = 0
s = list()
for i in soup.table.find_all('table')[-2].find_all('tr'):
if n == 0:
n += 1
continue
else:
ans = i.find_all('td')
break
ans = ans[0].text
return ans
def getstatus(self,runID):
status_url = 'http://acm.hdu.edu.cn/status.php?user=zzuliauto2'
s = list()
k = list()
while True:
time.sleep(1)
k = []
s = []
req = self.session.get(status_url)
soup = BeautifulSoup(req.text, 'lxml')
n = 0
for i in soup.table.find_all('table')[-2].find_all('tr'):
#print(i.text)
for j in i :
if n <10:
n+=1
continue
else:
s.append(j.string)
n = 0
for i in s:
if i == str(runID):
break
else:
n+=1
for i in range(0,9):
k.append(s[n+i])
for i in k:
if k[2]!= 'Queuing' and k[2] != 'Compiling' and k[2]!='Running':
return k
def getCE(self,runID):
ce_url = 'http://acm.hdu.edu.cn/viewerror.php?rid='+str(runID)
req = self.session.get(ce_url)
req.encoding = 'gbk'
soup = BeautifulSoup(req.text , 'lxml')
soup = soup.find('pre')
soup = soup.text
print(soup)
def submit(self, problemID,code ,language):
url = 'http://acm.hdu.edu.cn/submit.php?action=submit'
data = {
'check': '0',
'problemid': str(problemID),
'language': str(language),
'usercode': code.read()
}
headers = {
'Connect-Type': 'application/x-www-form-urlencoded'
}
print('submitting problem: ', problemID)
r = self.session.post(url, data=data, headers=headers)
ans = c.getID()
answer = c.getstatus(ans)
if answer[2] != 'Compilation Error':
print(answer)
else:
print(answer)
c.getCE(str(ans))
if __name__ == '__main__':
c = Accept()
user = 'zzuliauto2'
password = '19951106'
c.login(user, password)
code = open('5901.txt','r')
c.submit(5091,code=code ,language=5)