You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PySimpleGUI开发的GUI与Selenium CSV表单填充脚本整合

整合PySimpleGUI与Selenium自动化脚本解决方案

实现步骤说明

  • 首先将Selenium自动化逻辑封装为独立函数,接收CSV文件路径、Chrome版本号两个入参
  • 新增变量存储用户选择的CSV文件路径,避免选择后参数丢失
  • 新增Submit按钮事件监听,校验参数合法性后调用自动化函数
  • 按版本号映射对应chromedriver路径,提前将不同版本驱动命名为chromedriver_版本号.exe放在脚本同目录即可

完整可运行代码

import PySimpleGUI as sg
import csv
from selenium import webdriver
import time

# 封装的自动化执行函数
def run_automation(csv_path, chrome_version):
    # 拼接对应版本的驱动路径
    driver_path = f'./chromedriver_{chrome_version}.exe'
    with open(csv_path, 'r', encoding='utf-8') as csv_file:
        csv_reader = csv.reader(csv_file)
        driver = webdriver.Chrome(executable_path=driver_path)
        try:
            # 替换为你实际的目标网址
            driver.get('site/')
            # 定位表单元素
            title_field = driver.find_element_by_xpath('//*[@id="TITLE"]')
            fname_field = driver.find_element_by_xpath('//*[@id="FIRSTNAME"]')
            lname_field = driver.find_element_by_xpath('//*[@id="LASTNAME"]')
            phone_field = driver.find_element_by_xpath('//*[@id="PHONE"]')
            mail_field = driver.find_element_by_xpath('//*[@id="EMAIL"]')
            depost_field = driver.find_element_by_xpath('//*[@id="DEPOSIT"]')
            submit = driver.find_element_by_xpath('//*[@id="sib-form"]/div[9]/div/button')
            # 遍历CSV填写表单
            for line in csv_reader:
                # 跳过空行
                if not line:
                    continue
                time.sleep(3)
                # 填写前清空输入框,避免内容叠加
                title_field.clear()
                title_field.send_keys(line[0])
                fname_field.clear()
                fname_field.send_keys(line[1])
                lname_field.clear()
                lname_field.send_keys(line[2])
                phone_field.clear()
                phone_field.send_keys(line[3])
                mail_field.clear()
                mail_field.send_keys(line[4])
                depost_field.clear()
                depost_field.send_keys(line[5])
                submit.click()
        finally:
            # 任务结束自动关闭浏览器
            driver.quit()

def make_window(theme):
    sg.theme(theme)
    menu_def = [['&Application', ['E&xit']],
                ['&Help', ['&About']] ]
    right_click_menu_def = [[], ['Exit']]
    input_layout =  [[sg.Menu(menu_def, key='-MENU-')],
                [sg.Button("Open File")],
                [sg.Text('Chrome Version')],
                [sg.OptionMenu(values=('96', '97', '98'),  k='-OPTION MENU-'),],
                [sg.Button('Submit')]]
    layout = [[sg.Text('Email', size=(38, 1), justification='center', font=("Helvetica", 16), relief=sg.RELIEF_RIDGE, k='-TEXT HEADING-', enable_events=True)]]
    layout +=[[sg.TabGroup([[  sg.Tab('Setup CSV and Chrome Version', input_layout),
                               ]], key='-TAB GROUP-')]]
              
    return sg.Window('Email', layout, right_click_menu=right_click_menu_def)

def main():
    window = make_window(sg.theme())
    # 存储用户选择的CSV文件路径
    selected_csv = None
    # 事件循环
    while True:
        event, values = window.read(timeout=100)
        if event not in (sg.TIMEOUT_EVENT, sg.WIN_CLOSED):
            print('============ Event = ', event, ' ==============')
            print('-------- Values Dictionary (key=value) --------')
            for key in values:
                print(key, ' = ',values[key])
        if event in (None, 'Exit'):
            print("[LOG] Clicked Exit!")
            break
        elif event == 'About':
            print("[LOG] Clicked About!")
            sg.popup('email',
                     'Select CSV file',
                     'Select Chrome Version',
                     'Submit',
                     '')
        elif event == "Open File":
            print("[LOG] Clicked Open File!")
            folder_or_file = sg.popup_get_file('Choose your file', file_types=(("CSV Files", "*.csv"),))
            if folder_or_file:
                selected_csv = folder_or_file
                sg.popup("You chose: " + str(folder_or_file))
                print("[LOG] User chose file: " + str(folder_or_file))
        # 新增Submit按钮事件
        elif event == 'Submit':
            if not selected_csv:
                sg.popup_error('请先选择CSV文件!')
                continue
            chrome_ver = values['-OPTION MENU-']
            if not chrome_ver:
                sg.popup_error('请选择Chrome版本!')
                continue
            sg.popup('开始执行自动化任务,请勿关闭窗口!')
            try:
                run_automation(selected_csv, chrome_ver)
                sg.popup('自动化任务执行完成!')
            except Exception as e:
                sg.popup_error(f'执行出错:{str(e)}')
    window.close()
    exit(0)

if __name__ == '__main__':
    main()

关键逻辑说明

  • 参数传递:在事件循环内定义selected_csv变量存储用户选择的CSV路径,点击提交按钮时读取下拉选择的Chrome版本,两个参数同步传入自动化函数
  • 驱动匹配:直接通过版本号拼接驱动文件名,你只需要提前把对应版本的chromedriver重命名为chromedriver_xx.exe(xx为版本号)放在和脚本同目录下即可正常调用
  • 优化点:新增了输入框清空逻辑、空行跳过逻辑、执行完自动关闭浏览器的逻辑,同时加了基础异常处理,出错时会弹出提示

内容的提问来源于stack exchange,提问作者RawalD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:57:05