Python代码可以工作,但可执行文件(使用py2exe制作)却没有

时间:2017-11-06 14:07:58

标签: python selenium py2exe

我编写了一个Python程序,它使用Selenium从一些网站获取数据。这意味着我的代码需要3个文件:(1)带有一些输入参数的文本文件(2)firefox binary& (3)壁虎司机

现在与我的同事分享这个,我已经使用py2exe将其转换为可执行文件。

从shell执行的程序工作正常。但是,当通过可执行文件执行相同时,会导致各种错误 - 这些变化 - (1)未找到输入参数文件(2)未找到gecko驱动程序(3)窗口句柄错误6(并非每次都发生所有这些错误) 我如何确保它也可以作为可执行文件使用?

摘自代码:

gdir = str(os.path.realpath('.'))
gdir = gdir.replace('\\','\\\\')
inpArgPath = gdir + '\\\\inputArguments.txt'

ffpath = 'FirefoxPortable/App/Firefox64/firefox.exe'
binary = webdriver.firefox.firefox_binary.FirefoxBinary(ffpath)
gecko = gdir + '\\\\gecko\\\\geckodriver64.exe'

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.forbid_open_with",True)
fp.set_preference("browser.download.altClickSave",True)
fp.set_preference("browser.download.manager.showWhenStarting",False)

browser = webdriver.Firefox(firefox_binary=binary, firefox_profile=fp, executable_path=gecko)

硒错误:

Traceback (most recent call last):
  File "weeklyData_v5.py", line 18, in <module>
IOError: [Errno 2] No such file or directory: 'inputArguments.txt'
Traceback (most recent call last):
  File "weeklyData_v5.py", line 18, in <module>
IOError: [Errno 2] No such file or directory: 'inputArguments.txt'

另外两个错误示例:

  File "selenium\webdriver\firefox\webdriver.pyc", line 144, in __init__
  File "selenium\webdriver\common\service.pyc", line 81, in start
selenium.common.exceptions.WebDriverException: Message: 'geckodriver32.exe' executable needs to be in PATH. 

-

browser = webdriver.Firefox(firefox_binary=binary, firefox_profile=fp, executable_path=gecko)
  File "selenium\webdriver\firefox\webdriver.pyc", line 144, in __init__
  File "selenium\webdriver\common\service.pyc", line 74, in start
  File "subprocess.pyc", line 382, in __init__

  File "subprocess.pyc", line 515, in _get_handles

  File "subprocess.pyc", line 566, in _make_inheritable

WindowsError: [Error 6] The handle is invalid

1 个答案:

答案 0 :(得分:0)

你的错误是想到这一点。是你的脚本的路径。不是。它是相对于当前工作目录的路径。这可以是可执行文件所在的目录,然后可能会有效。但它可能完全不同。

您需要使用为您的程序提供的第一个命令行参数,即可执行文件。

import os
import sys
BASE = os.path.dirname(sys.argv[0])