如何使用Python Selenium WebDriver验证网页文本中的指定子串
需求描述
使用Python Selenium WebDriver对网页返回的指定文本内容进行校验:
- 待校验的返回文本格式示例:
+FCIN:~|210920145516|1|0|0000,0000|~ - 核心校验规则:验证指定位置是否为
|0|,该位置偶发异常返回|1|,需要识别这类异常情况 - 现有逻辑是从Excel读取设备ID,拼接请求地址后获取返回结果做校验
现有代码的问题
- 采用全量文本精准匹配的逻辑不合理:如果文本中其他字段(比如时间戳、设备标识)有合法变动,会触发误报
- 存在大量未使用的冗余导入包,增加不必要的依赖
- 使用了Selenium高版本已弃用的
find_element_by_tag_name方法,运行会触发警告甚至报错 - 没有异常捕获逻辑,元素加载失败、网络超时等情况会直接导致程序中断
优化后代码
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException, TimeoutException import openpyxl import time # 初始化浏览器 chrome_options = webdriver.ChromeOptions() web = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options) web.maximize_window() # 全局隐式等待,避免元素未加载就执行操作 web.implicitly_wait(5) # 读取Excel文件 excel_document = openpyxl.load_workbook(r"C:\Users\Sagar\Documents\validation.xlsx", data_only=True) sheet = excel_document["Sheet1"] base_url = "http://ts.vcccms.in/GwaliorMeterAPI/api/DeviceSchedule/DeviceScheduleInfo?DeviceID=2|" for i in range(2, sheet.max_row+1): cell_value = sheet[f"A{i}"].value try: # 发起请求 web.get(base_url + str(cell_value)) time.sleep(2) # 获取返回文本 element = web.find_element(By.TAG_NAME, "pre") res_text = element.text.strip() # 校验逻辑:拆分字段精准校验第四段(竖线分隔索引为3)的值 text_parts = res_text.split("|") if len(text_parts) >=4 and text_parts[3] == "0": print(f"设备ID {cell_value} 校验通过,返回值:{res_text}") else: print(f"设备ID {cell_value} 校验失败,异常返回:{res_text},指定位置值为{text_parts[3] if len(text_parts)>=4 else '格式错误'}") except (NoSuchElementException, TimeoutException) as e: print(f"设备ID {cell_value} 请求/解析异常:{str(e)}") finally: web.back() # 关闭浏览器 web.quit()
核心优化说明
- 校验逻辑改为按竖线拆分文本后精准校验指定位置的值,既避免了其他位置出现
|0|导致的误判,也不会因为其他合法字段变动触发误报 - 增加了异常捕获逻辑,单条数据校验失败不会中断整个测试流程
- 适配了Selenium高版本的元素查找语法,消除弃用警告
- 清理了所有未使用的冗余导入,降低运行依赖
内容的提问来源于stack exchange,提问作者user16244517
相关产品推荐
相关产品推荐

