OJ自动刷题机【转载 +推荐 + 提供源代码】

关于这个OJ刷题机,作者是我的同学 ^ _ ^ 经过他同意后,允许我直接转过来,当然还是帮他推荐一下咯~

点击进入miaoz-博客园

可能csdn无法跳转,附上博客网地址:https://www.cnblogs.com/miaos/

一直有这个想法做,可是奈何没有时间,周日晚上突然特别想做这个,然后一晚上边嗑啤酒边敲代码到凌晨五点多终于写完了这个原型,4个小时大概提交了四百多次过了一百多个题目,正确率就那样哈哈,代码没有处理查重问题,由于某些因素有时候会中断,之后有时间再做改进

稍微讲一下原理,登录->获取题目->根据题目百度爬url->筛选CSDN的url用无头浏览器爬取代码->提交代码->判断答案->错误继续爬,对了下一题

学校模拟oj登录啥的比较简单,就是密码MD5加密,然后有个csdf要注意一下,看好久都没有找到可以越权的地方,比较尴尬,

因为CSDN的内置搜索还没有百度好用,登录后爬到题目和内容再去爬百度,爬取百度参考了博客上面的,但是要注意的是百度给的url是重定向的,要处理一下得到真实url,然后再去爬CSDN,由于CSDN用了js加密,而且蛮复杂网上也没有找到案例,就用无头浏览器了,没什么技术含量,哈哈

代码贴上,要运行的话要装一下谷歌无头浏览器的驱动

#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import urllib.parse
import urllib
import hashlib, binascii
import time
import chardet 
from lxml import etree
import re
import json
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 导入chrome选项
from selenium.webdriver.chrome.options import Options
from requests.exceptions import RequestException
from urllib.parse import urljoin


global cs
user={
   
   'id':'','passw':''}
# 百度搜索接口
chrome_options = Options()#无头浏览器
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.set_page_load_timeout(10)
driver.set_script_timeout(10)
s=requests.session()
headers={
   
   'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:55.0) Gecko/20100101 Firefox/55.0'}

def saveHtml(file_name, file_content):
    with open(file_name.replace('/', '_') + ".html", "wb") as f:
        f.write(str.encode(file_content))

def format_url(url, params: dict=None) -> str:
    query_str = urllib.parse.urlencode(params)
    return f'{ url }?{ query_str }'

def get_url(keyword):
    params = {
   
   
        'wd': str(keyword)
    }
    url = "https://www.baidu.com/s"
    url = format_url(url, params)
    # print(url)

    return url

def get_page(url):
    try:
        headers = {
   
   
            'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
            'accept-language': 'zh-CN,zh;q=0.9',
            'cache-control
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一百个Chocolate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值