Python/Selenium结合列表遍历实现批量艺术模板自动创建的循环方法
批量创建艺术模板的可落地实现方案
列表读取优先选最简实现
- 优先直接读取现有xlsx文件,无需额外整理格式,用pandas三行代码即可导出所有非空模板名为可遍历的列表,比手动整理成txt文件少一步操作。代码示例:
import pandas as pd # 替换为本地xlsx文件路径、对应存放模板名的工作表 tpl_data = pd.read_excel("模板名称列表.xlsx", sheet_name="Sheet1") # 替换为Excel中模板名称列的实际表头,自动过滤空值、去除首尾多余空格 template_names = tpl_data["模板名列的实际表头"].dropna().str.strip().tolist()
- 若pandas安装异常,可将模板名逐行整理为txt文件,每行一个条目,无依赖读取代码:
with open("模板名称列表.txt", "r", encoding="utf-8") as f: template_names = [line.strip() for line in f.readlines() if line.strip()]
- 读取完成后先打印
len(template_names)核对条目总数,确保和待创建的1000个模板数量一致,避免漏读。测试阶段先截取列表前3个条目跑通全流程,再执行全量操作。
批量流程改造:替换硬编码值实现循环执行
将你已经验证跑通的单模板创建流程,封装为接收模板名参数的独立函数,不要将逻辑直接硬嵌入循环:
def create_single_template(driver, template_name): # 粘贴你已调试通过的单模板创建全流程代码 # 唯一修改点:将原来硬编码填写TemplateName的行,替换为传入的参数 # 例如原硬编码行:name_input.send_keys("硬编码模板名") # 修改为:name_input.send_keys(template_name) # 其余表单填写、提交、页面跳转的逻辑保持不变
主流程需加入异常捕获和日志记录,避免千级任务因单次网络波动、页面加载异常导致全流程中断:
# 以下为你原脚本的驱动初始化、携带凭证登录pulse系统的逻辑,保持不变 driver = 原驱动初始化代码 # 遍历所有待创建的模板条目 for idx, tpl_name in enumerate(template_names, 1): print(f"正在执行第{idx}个模板,名称:{tpl_name}") try: create_single_template(driver, tpl_name) # 成功条目写入日志,中断后可快速定位已完成进度 with open("创建成功日志.txt", "a", encoding="utf-8") as f: f.write(f"{tpl_name}\n") # 可选:加入随机短等待,避免操作频率过高触发内网系统限制 import random time.sleep(random.uniform(0.5, 1.5)) except Exception as e: print(f"模板{tpl_name}创建失败,错误:{str(e)}") # 失败条目单独记录,后续可直接用该日志文件补跑 with open("待重试列表.txt", "a", encoding="utf-8") as f: f.write(f"{tpl_name}\n")
页面等待优化:替换time.sleep,避开隐式等待的调试坑
无需反复调试全局生效的隐式等待,直接使用显式等待实现稳定的页面元素等待,不存在隐式等待的全局冲突问题,元素加载出来就立刻执行下一步,加载超时就抛出异常被外层捕获。
替换原有time.sleep的代码示例:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 初始化全局通用的等待对象,最长等待时长设为10秒 wait = WebDriverWait(driver, 10) # 原写法:等待元素加载后操作 # time.sleep(2) # name_input = driver.find_element(By.ID, "template_name_input") # 替换为显式等待:直到输入框可交互后再执行输入操作 name_input = wait.until( EC.element_to_be_clickable((By.ID, "template_name_input")) ) name_input.send_keys(template_name)
所有需要等待元素的场景——等待提交按钮可点击、等待提交成功提示弹出、等待模板创建页加载完成,均使用上述逻辑替换原来的time.sleep。既不会因为网络快造成无效等待,也不会因为网络慢导致元素未加载就执行操作报错。
千级批量任务的必做优化点
- 每连续创建10个模板,主动执行
driver.refresh()刷新页面,避免内网系统长时间运行缓存累积导致页面卡顿、元素识别失效 - 批量执行过程中不要最小化浏览器窗口,Selenium在最小化状态下有时会丢失页面焦点,导致输入、点击操作失效
- 首轮全量执行完成后,直接将生成的
待重试列表.txt作为列表读取源,单独执行失败条目的补跑,无需重复处理已成功的模板 - 启动浏览器驱动时添加
--start-maximized参数将窗口最大化,避免页面元素因窗口尺寸过小被遮挡导致操作失败 - 首次执行全量前,先将遍历范围限制在前5个模板,确认流程、日志记录全部正常后再放开全量运行,避免逻辑错误造成批量提交异常
内容的提问来源于stack exchange,提问作者Antonio Mcfarren
相关产品推荐
相关产品推荐

