获取个人AC的题目代码

一直都想写这么个东西,用户登录后,输入题号,找到代码链接,打印,就这么轻松,不过有的代码是在比赛里提交的,必须要到比赛里去找,所以若一下子找不到代码就要提供比赛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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值