【发布时间】:2021-12-01 11:46:19
【问题描述】:
所以我使用 Selenium 制作了一个脚本,该脚本从 CSV 输入表单详细信息。目标是现在做一个 GUI,我也做过,现在我无法理解的棘手部分是两者的结合。
我的图形用户界面:
import PySimpleGUI as sg
def make_window(theme):
sg.theme(theme)
menu_def = [['&Application', ['E&xit']],
['&Help', ['&About']] ]
right_click_menu_def = [[], ['Exit']]
# Table Data
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())
# This is an Event Loop
while True:
event, values = window.read(timeout=100)
# keep an animation running so show things are happening
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 == 'Popup':
print("[LOG] Clicked Popup Button!")
sg.popup("You pressed a button!")
print("[LOG] Dismissing Popup!")
elif event == "Open File":
print("[LOG] Clicked Open File!")
folder_or_file = sg.popup_get_file('Choose your file')
sg.popup("You chose: " + str(folder_or_file))
print("[LOG] User chose file: " + str(folder_or_file))
window.close()
exit(0)
if __name__ == '__main__':
main()
我的脚本:
#-------------------------------------------------------------------------------
# Imports
import csv
import requests
from selenium import webdriver
import time
#-------------------------------------------------------------------------------
# Setup
with open('data.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file)
#-------------------------------------------------------------------------------
# Web Automation
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
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')
for line in csv_reader:
time.sleep(3)
title_field.send_keys(line[0])
fname_field.send_keys(line[1])
lname_field.send_keys(line[2])
phone_field.send_keys(line[3])
mail_field.send_keys(line[4])
depost_field.send_keys(line[5])
submit.click()
#-------------------------------------------------------------------------------
我想从 GUI 中选择 CSV 文件,并在选项上使用 if 和 else 来选择适当的 chromedriver.exe 文件,然后提交以运行应用程序。我知道我必须将自动化部分变成一个函数,但是我在哪里放置自动化代码和文件、chromeversion 和条件的参数?
任何和所有帮助表示赞赏。
【问题讨论】:
-
对于 GUI,我建议使用 tkinter 模块。
标签: python selenium csv pysimplegui