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
- python3 实现 virtual judge 日志(三): 本地交题姬 2016.11.9更新
- python3 实现 virtual judge 日志(二):爬取HDU的页面 (2016.11.4更新)
- python3 实现 virtual judge 日志(一):框架 2016.11.7更新
- virtual judge 本地部署方案
- 用python3实现HDU爬虫(后续可能更新VJ)2016.11.4更新
- python3爬虫,最短时间实现(三)
- linux(ubuntu)下 virtual judge 环境搭建 与配置
- linux(ubuntu)下 virtual judge 环境搭建 与配置
- linux(ubuntu)下 virtual judge 环境搭建 与配置
- [Virtual Judge]SGU171:Sarov zones
- [Virtual Judge]URAL1303:Minimal Coverage
- virtual judge配置和发布
- Virtual Judge Contest 1-E
- Virtual Judge Contest 1-F
- APOC-UVA virtual judge 开启
- Virtual Judge 注册用户教程
- 关于virtual judge的问题
- C#实现本地文本日志
- 欢迎使用CSDN-markdown编辑器
- MySql学习 日记
- IDEA jetty - 热部署插件JRebel 安装使用教程
- H - Kefa and Park
- emlog在php7.0中的错误修正
- python3 实现 virtual judge 日志(三): 本地交题姬 2016.11.9更新
- 补间动画的bug
- AJAX浏览器缓存问题
- 导入jar包失败
- 【Android - MD】之RecyclerView的使用
- PHP Simple HTML DOM解析器使用入门
- Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别
- Eclipse中离线安装ADT插件详细教程
- C++ P1576 最小花费