如何在Python与Selenium中用整数列表替代range函数查询学生成绩
问题描述
我有一个用于查询学生成绩的Python脚本,目前使用range函数遍历连续学号(示例代码如下),但我希望改用自定义的整数列表来替代range函数,借助Selenium完成学号输入与成绩查询操作。我是新手,尚未进行任何尝试,恳请指导。
原示例代码:
# put rollnumber without zero like # your number 0477593 then # put 477593 upto XXXXX. start_rollNum = 2245000092 end_rollNum = 2249553367 # put range of rollnumber for i in range(start_rollNum, end_rollNum ):
解决方案
1. 定义自定义学号列表
直接把需要查询的学号整理成整数列表即可,想加多少就加多少:
# 自定义学号列表,把要查的学号都放这里 custom_roll_numbers = [2245000092, 2245000095, 2249553367, 2246000100]
2. 安装Selenium与浏览器驱动
先安装Selenium包,打开命令行执行:
pip install selenium
另外需要安装对应浏览器的驱动(比如ChromeDriver),要确保驱动版本和你的浏览器版本匹配,下载后放到Python安装目录或者系统PATH中,否则浏览器无法正常启动。
3. 完整查询脚本示例
下面是完整的可运行脚本,其中的元素定位需要你根据实际查询页面的HTML结构调整:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 自定义学号列表 custom_roll_numbers = [2245000092, 2245000095, 2249553367] # 启动Chrome浏览器 driver = webdriver.Chrome() try: # 打开成绩查询页面,替换成你实际使用的URL driver.get("https://xxx.com/score-query") # 遍历每个学号执行查询 for roll_num in custom_roll_numbers: # 等待学号输入框加载完成,替换成页面输入框的实际定位器 roll_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "rollnumber-input")) ) # 清空输入框并输入当前学号 roll_input.clear() roll_input.send_keys(str(roll_num)) # 等待查询按钮可点击,替换成页面按钮的实际定位器 search_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[text()='查询成绩']")) ) search_btn.click() # 等待成绩结果加载并提取,替换成页面成绩元素的实际定位器 try: score_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "score-result")) ) print(f"学号 {roll_num} 的成绩:{score_element.text}") except: print(f"学号 {roll_num} 查询失败或无成绩记录") # 返回查询页面,继续处理下一个学号 driver.back() finally: # 无论成功与否,最后关闭浏览器 driver.quit()
关键注意事项
- 元素定位需调整:打开查询页面按F12,查看输入框、查询按钮、成绩显示区域的HTML属性,替换代码中对应的
By.ID、By.XPATH等定位内容。 - 使用等待机制:用
WebDriverWait等待元素加载完成再操作,比直接用time.sleep()更稳定,避免因页面加载慢导致报错。 - 反爬应对:避免过于频繁的请求,必要时添加短时间等待,防止被网站限制访问。
- 异常扩展:代码中仅做了基础异常捕获,若遇到验证码、网络波动等情况,可自行补充对应处理逻辑。
内容的提问来源于stack exchange,提问作者Aman Pathak
相关产品推荐
相关产品推荐

