中山大学抢羽毛球系统

本文演示了如何使用Python的selenium库和OCR技术登录中山大学的在线系统,详细步骤包括设置ChromeOptions防止被识别为自动化脚本,截图识别验证码,输入用户名、密码和验证码,以及在登录后操作相关页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from ddddocr import DdddOcr
import time
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from PIL import Image

ocr = DdddOcr()
url = "https://portal.sysu.edu.cn/#/login"

# opt.add_argument('--headless')

options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': 'Object.defineProperty(navigator, "webdriver" ,{get:() => undefined}) '
})
driver.get(url)
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'

driver.maximize_window()
driver.find_element_by_xpath('//*[@id="root"]/span/div/div[2]/div[1]/div/div[1]/div[2]/div/div/div/button').click()
driver.maximize_window()
imm = driver.find_element_by_css_selector('#captchaImg')
imm.screenshot("2.png")

image = Image.open("2.png")
file = open('2.png','rb'
### 华中科技大学羽毛球场地自动订脚本 实现一个用于自动订华中科技大学羽毛球场地的 Python 脚本需要考虑以下几个方面: #### 1. 登录模块 为了模拟登录操作,通常需要通过 HTTP 请求发送用户名和密码到服务器端验证身份。可以使用 `requests` 库来处理这一过程[^1]。 ```python import requests from bs4 import BeautifulSoup session = requests.Session() login_url = 'https://example.com/login' # 替换为实际登录地址 data = { 'username': 'your_username', 'password': 'your_password' } response = session.post(login_url, data=data) if response.status_code == 200 and '欢迎' in response.text: print('登录成功') else: print('登录失败,请检查账号信息') ``` #### 2. 场地查询与预订逻辑 在完成登录之后,下一步是从网站获取可用时间表并尝试预定指定时间段内的场地。这一步可能涉及到解析 HTML 页面或者调用 API 接口[^2]。 假设目标系统提供了 RESTful 风格的服务,则可以直接向特定 URL 发送 GET 或 POST 请求以检索数据;如果仅能依赖网页抓取技术的话,则需要用到像 Beautiful Soup 这样的工具包来进行 DOM 解析工作。 ```python booking_url = 'https://example.com/book_court' def find_available_slots(): slots_response = session.get(booking_url).json() # 假设返回 JSON 数据结构 available_timeslots = [] for slot in slots_response['slots']: if not slot['is_booked'] and slot['court_name'].startswith('Badminton'): available_timeslots.append(slot) return available_timeslots available_slots = find_available_slots() print(f"Found {len(available_slots)} available time(s)") ``` #### 3. 提交订单 一旦找到合适的时段后就可以执行最后一步——提交预约请求了。这里需要注意的是某些平台可能会加入验证码机制防止自动化程序滥用资源,在这种情况下还需要额外解决 CAPTCHA 的识别问题[^3]。 ```python selected_slot_id = None for idx, slot in enumerate(available_slots[:5]): # 只看前五个选项作为例子演示 selected_slot_id = slot['id'] break reserve_payload = {'slotId': str(selected_slot_id)} confirmation_result = session.post(booking_url + '/confirm', json=reserve_payload) assert confirmation_result.ok, f'Reservation failed with reason:{confirmation_result.content}' print("Reservation confirmed successfully!") ``` 以上代码片段仅为示意用途,请根据实际情况调整相应参数以及错误处理部分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值