如何将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
相关产品推荐
相关产品推荐

