可执行文件的python 文件输出致命的错误消息



我写了一个python脚本,可以与网页通信并进行在线订购。除此之外,我还添加了一些GUI,允许用户选择订单日期。这是蟒蛇脚本

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:webdriverschromedriver.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 LunchOrder.py(中运行简单的行。不幸的是,.exe没有做任何事情,它只是弹出"Fatal error detected"消息,没有任何 GUI(我已经写入脚本本身(。任何帮助将不胜感激!

在这里,我将告诉您一种更好的方法来使.py.exe。首先确保你的python被添加到系统PATH中,我认为是这样。如果没有检查一些有关如何将python添加到PATH的教程,那么您可以打开cmd并输入:

pip install pyinstaller

在此之后,您转到存在 LunchOrder.py 的路径并在那里打开一个cmd,在窗口中,您只需在地址栏中键入cmd(清除地址栏后(,或者打开cmd并导航到文件所在的路径 LunchOrder.py 只需输入:

pyinstaller -w -F -i "app.ico" LunchOrder.py

这应该会形成一个文件夹,您的.exe将在其中。确保将.exe复制到 DIST 文件夹外部并在那里运行它。否则,您可能仍会收到致命错误消息。您可以删除生成的所有其他额外文件,例如build和LunchOrder.spec。如果它仍然给您错误,请尝试按照此方法 https://www.youtube.com/watch?v=OZSZHmWSOeM

相关内容

最新更新