Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可执行python文件输出致命错误消息_Python_Selenium_User Interface_Exe_Pyinstaller - Fatal编程技术网

可执行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.

我已经编写了一个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.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。如果仍然出现错误,请尝试使用此方法