python3 实现 virtual judge 日志(三): 本地交题姬 2016.11.9更新

来源:互联网 发布:久久小说软件下载 编辑:程序博客网 时间:2024/05/21 07:46

目前来说思路大概是:把从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 reimport requestsimport timefrom bs4 import BeautifulSoupclass 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)


0 0
原创粉丝点击