获取个人AC的题目代码
来源:互联网 发布:chrome的json插件 编辑:程序博客网 时间:2024/06/16 08:57
一直都想写这么个东西,用户登录后,输入题号,找到代码链接,打印,就这么轻松,不过有的代码是在比赛里提交的,必须要到比赛里去找,所以若一下子找不到代码就要提供比赛id
一开始我是直接在Submissions里挨个搜索所找的题目和代码,感觉贼慢,特别是你如果提交的题目很多的话,后来观察了下网址,想到直接跳到那道题你提交的页面,然后搜索AC代码,这样就快多了
#!/usr/bin/env python #-*-coding:utf-8-*- import sys, re import urllib, urllib2 import cookielib import getpass from bs4 import BeautifulSoup #处理编码问题reload(sys)sys.setdefaultencoding( "utf-8" )home_url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home' login_url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Login/login' #安装cookie处理 cookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar()) opener = urllib2.build_opener(cookie_support) urllib2.install_opener(opener) #初始化cookie home_temp = urllib2.urlopen(home_url) #伪装成浏览器,以免服务器拒绝访问 headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'} uername = raw_input('请输入用户名:\n') key = getpass.getpass('请输入登录密码:\n') #密码不可见 values = {'user_name': uername, 'password': key} #login post = urllib.urlencode(values) request = urllib2.Request(login_url, post, headers) response = urllib2.urlopen(request) html = response.read() #解析登录后的页面并判断是否登录成功 soup = BeautifulSoup(html) if soup.find(text = 'Logout') != None: print '登录成功:)\n' else: print '登录失败:(\n' sys.exit(0) #直接退出 #在problem或contest里查找代码def FindCode(url, pid): t = 0 while t == 0: sub = BeautifulSoup(urllib2.urlopen(url)) table = sub.find_all('tr') for tr in table: try: tr = tr.find_all('td') if tr[3].text == 'Accepted' and tr[2].a['href'][-9:-5] == pid: code = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Viewcode/view/sid/' + tr[0].text res = BeautifulSoup(urllib2.urlopen(code)) print res.find(class_ = 'brush:cpp;').text return True except: pass try: url = 'http://acm.sdut.edu.cn' + sub.find(class_ = 'next')['href'] except: return False #输入题号,获取AC代码 while True: pid = raw_input('输入你要找的代码题号:\n') url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Solution/status?runid=&username=' + uername + '&pid=' + pid + '&lang=&result=' if FindCode(url, pid) == False: cid = raw_input('没有找到代码,输入pid在比赛里找找吧\n') url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/conteststatus/cid/' + cid + '/uid/23897.html' FindCode(url, pid)
运行截图:
阅读全文
0 0
- 获取个人AC的题目代码
- AC的第一道省赛题目代码
- 我的AC题目清单
- 趣味算法实习:踩气球第二周-《一道很简单的题目》解题报告&AC代码
- [AC自动机]个人对于AC自动机的理解
- 对ac自动机的一些个人理解
- 各种待AC,待理解的题目
- Uva 上自己AC 的题目
- AC自动机的一些题目及思路
- 计算几何题目推荐第一期AC代码
- 【南阳OJ分类之大数问题】题目+AC代码汇总
- CCF模拟题部分题目解题思路与AC代码
- LeetCode 495. Teemo Attacking 题目翻译+AC代码
- 80题题目+AC代码汇总 ~ 南阳 NYOJ
- hdu2055 两个ac代码和一个无法ac的代码
- HDU ACM 11 2034 人见人恨的A-B(此题题目有问题,不要纠结代码为何可以AC)
- 代码的个人心得
- 个人总结的代码
- Unity3D利用Photon实现实时联网对战(三)创建和加入房间
- 模拟模拟交易系统(二)——系统设计
- FTPrep, Combination Sum II
- S905方案定制 S805方案定制 Amlogic S805 S905方案设计 MXQ方案 MXQ PRO方案 amlogic方案
- hadoop—视频笔记
- 获取个人AC的题目代码
- jQuery选择器(2)
- Codeforces 839 B. Game of the Rows (贪心)
- 【jzoj5251】【GDOI2018模拟8.11】【决战】【状态压缩动态规划】
- MongoDB Capped集合 使用注意事项
- C语言入门:奇数值节点链表
- Codeforces Round #428 (Div. 2) B.Game of the Rows(贪心)
- 【字符串】寻宝之旅
- UVA10791MinimumSumLCM