Python 带有 selenium(webdriver) 的程序不能作为单个和非控制台 exe 文件(pyinstaller)工作
Python program with selenium(webdriver) Don't Work as single and noconsole exe file (pyinstaller)
以下是我的python代码:
## t.py ##
from tkinter import messagebox
from tkinter import *
from selenium import webdriver
def clicked():
iedriver = "C:\Program Files\Internet Explorer\IEDriverServer.exe"
try:
driver=webdriver.Ie(iedriver)
except Exception as e:
messagebox.showerror("Error",e)
driver.get('www.baidu.com')
Top=Tk()
Button(Top,text='Click Me',command=clicked).pack()
Top.mainloop()
这工作正常,但是当我使用 PyInstaller(t.spec):
将其转换为单个 .exe 文件时
# -*- mode: python -*-
block_cipher = None
a = Analysis(['D:\program\Python\t.py'],
pathex=['D:\program\Python'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=None,
runtime_hooks=None,
excludes=None,
win_no_prefer_redirects=None,
win_private_assemblies=None,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='t',
debug=False,
strip=None,
upx=False,
console=0 , icon='D:\program\Python\logo\t.ico')
点击运行按钮会提示如下错误:
Seems that IEDriver executable can't be recognized
当我在spec文件中将选项"console=0"更改为"console=1"时,IE点击按钮后可以运行。知道为什么在设置 "console=0" 时 IE 不能 运行 吗?
我想我通过修改 selenium 包中的 Service class 解决了这个问题。我不确定这是否是 selenium(2.47.3) 的错误。原始代码在调用 subprocess.Popen
函数时仅重定向 stdout
和 stderr
而不是 stdin
。
我修改了以下代码:
self.process = subprocess.Popen(cmd,
stdout=PIPE, stderr=PIPE)
收件人:
self.process = subprocess.Popen(cmd, stdin=PIPE,
stdout=PIPE, stderr=PIPE)
那么问题就解决了
以下是我的python代码:
## t.py ##
from tkinter import messagebox
from tkinter import *
from selenium import webdriver
def clicked():
iedriver = "C:\Program Files\Internet Explorer\IEDriverServer.exe"
try:
driver=webdriver.Ie(iedriver)
except Exception as e:
messagebox.showerror("Error",e)
driver.get('www.baidu.com')
Top=Tk()
Button(Top,text='Click Me',command=clicked).pack()
Top.mainloop()
这工作正常,但是当我使用 PyInstaller(t.spec):
将其转换为单个 .exe 文件时# -*- mode: python -*-
block_cipher = None
a = Analysis(['D:\program\Python\t.py'],
pathex=['D:\program\Python'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=None,
runtime_hooks=None,
excludes=None,
win_no_prefer_redirects=None,
win_private_assemblies=None,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='t',
debug=False,
strip=None,
upx=False,
console=0 , icon='D:\program\Python\logo\t.ico')
点击运行按钮会提示如下错误: Seems that IEDriver executable can't be recognized
当我在spec文件中将选项"console=0"更改为"console=1"时,IE点击按钮后可以运行。知道为什么在设置 "console=0" 时 IE 不能 运行 吗?
我想我通过修改 selenium 包中的 Service class 解决了这个问题。我不确定这是否是 selenium(2.47.3) 的错误。原始代码在调用 subprocess.Popen
函数时仅重定向 stdout
和 stderr
而不是 stdin
。
我修改了以下代码:
self.process = subprocess.Popen(cmd,
stdout=PIPE, stderr=PIPE)
收件人:
self.process = subprocess.Popen(cmd, stdin=PIPE,
stdout=PIPE, stderr=PIPE)
那么问题就解决了