You need to enable JavaScript to run this app. Python/Selenium结合列表遍历实现批量艺术模板自动创建的循环方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 01:36:04