使用Python Selenium提取ul下li元素并与txt文件内容比对
Selenium下拉菜单文本与本地TXT比对实现方案
前置准备
- 确保你的待比对TXT文件每行存储1条目标文本,空行会被自动过滤
- 你已实现的ul元素定位逻辑可直接复用,无需修改核心定位代码
完整实现代码
from selenium import webdriver from selenium.webdriver.common.by import By # ---------------------- 1. 读取本地TXT待比对内容 ---------------------- txt_path = "你的待比对文件路径.txt" # 替换为你的txt文件实际路径 with open(txt_path, "r", encoding="utf-8") as f: # 逐行读取,去除前后空白、换行符,过滤空行 txt_content_set = set(line.strip() for line in f.readlines() if line.strip()) # ---------------------- 2. 提取页面下拉菜单li文本 ---------------------- # 复用你已有的定位逻辑 ul_element = driver.find_element(By.CSS_SELECTOR, "div#ProgramCategoriesAndCodes_chzn ul.chosen-results") li_elements = ul_element.find_elements(By.TAG_NAME, "li") # 统一处理li文本,避免前后空格、换行符导致比对失败 page_li_set = set(li.text.strip() for li in li_elements if li.text.strip()) # ---------------------- 3. 执行比对逻辑 ---------------------- # 页面存在但TXT中不存在的内容 only_in_page = page_li_set - txt_content_set # TXT存在但页面中不存在的内容 only_in_txt = txt_content_set - page_li_set # 两边完全匹配的内容 matched_content = page_li_set & txt_content_set # ---------------------- 4. 输出比对结果 ---------------------- print("===== 比对结果 =====") print(f"匹配成功的内容(共{len(matched_content)}条):") for item in matched_content: print(f"- {item}") if only_in_page: print(f"\n页面存在但TXT中缺失的内容(共{len(only_in_page)}条):") for item in only_in_page: print(f"- {item}") if only_in_txt: print(f"\nTXT存在但页面中缺失的内容(共{len(only_in_txt)}条):") for item in only_in_txt: print(f"- {item}") if not only_in_page and not only_in_txt: print("\n✅ 页面下拉菜单内容与TXT内容完全匹配")
可选优化点
- 如果需要忽略大小写比对,读取文本和提取li文本时统一调用
.lower()方法即可 - 如果需要保留重复项、保留原始顺序比对,把
set换成list,用循环遍历的方式做校验即可 - 若下拉菜单为懒加载渲染,需要先滚动触发所有li加载完成后再提取文本
内容的提问来源于stack exchange,提问作者Esepee
相关产品推荐
相关产品推荐

