可执行python文件输出致命错误消息
我已经编写了一个python脚本,它可以与web页面通信并进行在线订购。除此之外,我还添加了一些GUI,允许用户选择订单日期。下面是python脚本可执行python文件输出致命错误消息,python,selenium,user-interface,exe,pyinstaller,Python,Selenium,User Interface,Exe,Pyinstaller,我已经编写了一个python脚本,它可以与web页面通信并进行在线订购。除此之外,我还添加了一些GUI,允许用户选择订单日期。下面是python脚本 import easygui import sys from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.
import easygui
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import tkinter as tk
import tkinter.font as tkFont
badge_number = 111111
# Widget pop up for selection of the order day
root = tk.Tk()
def center_window(w=300, h=200):
# get screen width and height
ws = root.winfo_screenwidth()
hs = root.winfo_screenheight()
# calculate position x, y
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
root.geometry("400x450")
Label = tk.Label(root, text = "Select lunch Order Day", font = ("Helvetica", 15))
Label.pack(pady=50, padx=40)
helv15 = tkFont.Font(family = "Helvetica", size = 15)
root.lift()
v = tk.StringVar()
v.set("Today")
tk.Label(root, textvariable = v).pack()
def close_window():
root.destroy()
today = tk.Radiobutton(root, text = "Today", variable = v, value = "Today", font = helv15).pack()
tomorrow = tk.Radiobutton(root, text = "Tomorrow", variable = v, value = "Tomorrow", font = helv15).pack()
cancel = tk.Radiobutton(root, text = "Cancel", variable = v, value = "Cancel", font = helv15).pack()
submit = tk.Button(root, text = "Submit", command = close_window, font = helv15).pack()
center_window(400, 400)
root.mainloop()
if v.get() == "Cancel":
sys.exit("Ordering was terminated")
driver = webdriver.Chrome(executable_path = "C:\webdrivers\chromedriver.exe")
driver.get("http://web_page/")
element = driver.find_element_by_name('employee_id')
element.send_keys(badge_number)
driver.find_element_by_xpath("/html/body/section/header/form/div/button").click()
# /html/body/section/header/form/div/button
delay = 60
todayBut = "/html/body/section/div[1]/div[2]/div/div/div/span[2]/span[1]/form/button"
tomorBut = "/html/body/section/div[1]/div[2]/div/div/div/span[1]/span[1]/form/button"
favorButToday = "/html/body/section/div/div[1]/button"
favorButTomor = "/html/body/section/div/div[1]/button/a"
myFavOrderID = "fav_order_view"
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, todayBut)))
except TimeoutException:
print ("Loading Day Selection page took too much time!")
if v.get() == "Today":
driver.find_element_by_xpath(todayBut).click()
#favorite choice
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, favorButToday)))
driver.find_element_by_xpath(favorButToday).click()
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, myFavOrderID)))
driver.find_element_by_id(myFavOrderID).click()
### select floor, order date and order now
select_floor = Select(driver.find_element_by_name("floor_number"))
select_floor.select_by_index("9")
select_day = Select(driver.find_element_by_name("order_date"))
select_day.select_by_value("today")
orderNowBtn = "/html/body/div[1]/div[2]/div/div/div[3]/form/button"
driver.find_element_by_xpath(orderNowBtn).click()
print("Today's order was successfully made!")
except TimeoutException:
print ("Loading Favorites page took too much time!")
except TimeoutException:
print ("Loading took too much time!")
else:
driver.find_element_by_xpath(tomorBut).click()
#favorite choice
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, favorButTomor)))
driver.find_element_by_xpath(favorButTomor).click()
try:
myFavOrderIDTomor = "fav_order_view"
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, myFavOrderIDTomor)))
driver.find_element_by_id(myFavOrderIDTomor).click()
### select floor, order date and order now
select_floor = Select(driver.find_element_by_name("floor_number"))
select_floor.select_by_index("9")
select_day = Select(driver.find_element_by_name("order_date"))
select_day.select_by_value("tomorrow")
orderNowBtnTomor = "/html/body/div[1]/div[2]/div/div/div[3]/form/button"
driver.find_element_by_xpath(orderNowBtnTomor).click()
print("Tomorrow's order was successfully made!")
except TimeoutException:
print ("Loading Favorites page took too much time!")
except TimeoutException:
print ("Loading took too much time!")
然而,我想把它作为一个.exe文件运行,只需从我的桌面双击它。因此,我已经从git安装了
pyinstaller
,并在cmd中运行了简单的一行(pyinstaller.exe--onefile--windowed--icon=app.ico午餐顺序.py
)。不幸的是,.exe没有做任何事情,它只是弹出“检测到致命错误”
消息,没有任何GUI(我已经写入脚本本身)。任何帮助都将不胜感激 在这里,我将告诉您一种将.py转换为.exe的更好方法。首先确保您的python被添加到系统路径中,我假设是这样的。如果没有检查一些关于如何将python添加到PATH的教程,则可以打开cmd并键入:
pip install pyinstaller
在此之后,您可以转到存在午餐订单.py的路径并在那里打开cmd,在windows中,您可以在地址栏中键入cmd(清除地址栏后),或者打开cmd并导航到存在午餐订单.py文件的路径并键入:
pyinstaller -w -F -i "app.ico" LunchOrder.py
这将创建一个文件夹dist,其中包含您的.exe。确保将.exe复制到dist文件夹之外并在那里运行。否则,您可能仍然会收到致命错误消息。您可以删除生成的所有其他额外文件,如build和午餐订单.spec。如果仍然出现错误,请尝试使用此方法