
本文介绍如何在 Python + Selenium 脚本中,用预定义的整数列表(如学生准考证号)替代 range() 循环,实现精准、可控的批量查询操作,并附完整示例与关键注意事项。
本文介绍如何在 python + selenium 脚本中,用预定义的整数列表(如学生准考证号)替代 `range()` 循环,实现精准、可控的批量查询操作,并附完整示例与关键注意事项。
在实际的学生查分自动化场景中,你往往不需要遍历一个连续的大范围数字(如 range(2245000092, 2249553367)),而更可能面对一份明确的、非连续的、甚至已去重/筛选过的 roll number 列表(例如来自 Excel 导出、数据库导出或人工整理的名单)。此时,直接使用 Python 列表迭代是最简洁、高效且安全的做法。
以下是一个完整的 Selenium 实践示例(以 Chrome 浏览器为例):
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
# ✅ 定义你的目标准考证号列表(可任意修改、增删、排序)
roll_numbers = [
2245000092,
2246123456,
2249553367,
2247001122
]
# 初始化 WebDriver(请确保 chromedriver 在 PATH 中,或指定 executable_path)
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10) # 显式等待,提升稳定性
try:
for roll in roll_numbers:
# 假设查分页面 URL 为 https://example.com/result?roll=
driver.get("https://example.com/result")
# 定位输入框(请根据实际网页的 HTML 修改 selector)
input_field = wait.until(EC.presence_of_element_located((By.ID, "rollNumberInput")))
input_field.clear()
input_field.send_keys(str(roll)) # ⚠️ 注意:Selenium 输入必须是字符串!
# 点击查询按钮
submit_btn = driver.find_element(By.ID, "submitBtn")
submit_btn.click()
# 等待结果区域加载(例如 class="result-card")
result_div = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "result-card")))
# 可选:提取并打印结果(如姓名、总分等)
print(f"✅ Roll {roll}: {result_div.text.strip()[:100]}...")
# 可选:添加短暂间隔,避免请求过快被拦截
# import time; time.sleep(1)
except Exception as e:
print(f"❌ 处理准考证 {roll} 时出错: {e}")
finally:
driver.quit()
? 关键注意事项:
- 类型转换不可少:Selenium 的 .send_keys() 只接受字符串,务必使用 str(roll) 转换整数;
- 列表来源灵活:roll_numbers 可来自 CSV(用 pandas.read_csv())、Excel(openpyxl)、数据库查询结果,甚至 API 返回的 JSON;
- 避免硬编码大列表:若数量庞大(如上千条),建议从外部文件读取,而非写死在代码中;
- 异常隔离:单个 roll 查询失败不应中断整个流程,推荐用 try...except 包裹每次循环体;
- 反爬友好性:添加 time.sleep()、设置 User-Agent、启用无头模式等,有助于提高稳定性(生产环境必备)。
总结来说,用 for roll in roll_numbers: 替代 for i in range(...) 不仅语义清晰、控制精确,还能天然规避超大整数范围导致的内存/性能问题,是面向真实业务数据的更优实践。











