我正在使用Selenium(v2.37.2)开发自动网络测试仪。程序正常工作,直到我运行使用cxfreeze构建的测试(还有tkinter gui)。
有init函数
def initDriver(self):
if self.browser == FIREFOX:
profile = webdriver.FirefoxProfile(profile_directory=self.profile);
self._driver = webdriver.Firefox(firefox_profile=profile)
elif self.browser == CHROME:
self._driver = webdriver.Chrome(self.executable, chrome_options=profile)
elif self.browser == IEXPLORER:
self._driver = webdriver.Ie(self.executable)
现在,当我使用Cx_freeze构建它时,我收到此错误
方法redirectToBlank(...)调用initDriver(..)作为第一件事我如何将.xpi文件打包到library.zip文件 - 我必须使用setup.py中的哪个选项?我甚至不得不这样做吗?
第二个奇怪的是,当我通过点击它的图标执行.exe文件时,其他浏览器工作正常,但是当我从命令行运行它时,我甚至对chrome和IE都会出错。 (很抱歉,回溯没有完成)
所有路径都与执行的文件相关(无论您从哪里运行),
感谢您解决此问题的任何想法。
(方法redirectToBlank(...)首先调用initDriver(..))
答案 0 :(得分:1)
第一个问题已解决 这是selenium的问题 - FirefoxProfile - 类,它试图将webdriver.xpi作为普通文件加载,但selenium将所有库打包为zip文件,因此selenium无法找到它。 甚至强制安装文件中的cx_freeze将webdriver.xpi添加到zip中的正确目录也无济于事。
有必要编辑FirefoxProfile(在firefox_profile模块中)类,例如这样
def _install_extension(self, addon, unpack=True):
"""
Installs addon from a filepath, url
or directory of addons in the profile.
- path: url, path to .xpi, or directory of addons
- unpack: whether to unpack unless specified otherwise in the install.rdf
"""
if addon == WEBDRIVER_EXT:
# altered lines
import sdi.env
WEBDRIVER_SUBSTITUTE = "path/to/unpacked/webdrive.xpi"
addon = os.path.join(os.path.dirname(__file__), WEBDRIVER_SUBSTITUTE)
# Original lines:
# addon = os.path.join(os.path.dirname(__file__), WEBDRIVER_EXT)
< the rest of the method >
第2期
OSError: win error 6: the handle is invalid
问题不是由cxfreeze或selenium引起的。我从git bash运行最终的exe文件。有问题。由于某种原因,git bash不会为程序打开stdin,这就是它失败的原因。当我在标准的Windows命令行中运行它时,一切正常,或者如果我从git bash运行它,如program.exe < empty_file
答案 1 :(得分:0)
我所做的是从包列表中删除selenium。
并将其放在includefiles
内,然后就可以了。
includefiles = [(seleniumPackage,'')]
...
options = {'build_exe': {'includes':includes,
'excludes':excludes,
'optimize':2,
'packages':packages,
'include_files':includefiles,
...