我编写了一个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
答案 0 :(得分:0)
你的错误是想到这一点。是你的脚本的路径。不是。它是相对于当前工作目录的路径。这可以是可执行文件所在的目录,然后可能会有效。但它可能完全不同。
您需要使用为您的程序提供的第一个命令行参数,即可执行文件。
import os
import sys
BASE = os.path.dirname(sys.argv[0])