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

问题描述 投票:0回答:1

我编写了一个python脚本,可以与网页进行通信并进行在线订购。除此之外,我还添加了一些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.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 LunchOrder.py)中运行了简单的代码行。不幸的是,.exe并没有什么作用,它只是弹出"Fatal error detected"消息,而没有任何GUI(我已将其写入脚本本身)。任何帮助,将不胜感激!

python selenium user-interface exe pyinstaller
1个回答
0
投票

[在这里,我将告诉您将.py转换为.exe的更好方法。首先确保您的python已添加到系统PATH,我认为是。如果未查看有关如何将python添加到PATH的一些教程,则可以打开cmd并输入:

pip install pyinstaller

[此后,转到存在LunchOrder.py的路径并在其中打开cmd,在Windows中,您只需在地址栏中键入cmd(清除adressbar后输入),否则打开cmd并导航至您的LunchOrder.py文件所在的路径,只需键入:

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

这应该使文件夹dist进入您的.exe文件。确保将.exe复制到dist文件夹并在其中运行。否则您可能仍然会收到致命错误消息。您可以删除所有其他已生成的其他文件,例如build和LunchOrder.spec。如果仍然给您错误,请尝试使用此方法https://www.youtube.com/watch?v=OZSZHmWSOeM

© www.soinside.com 2019 - 2024. All rights reserved.