【问题标题】:Python program with selenium(webdriver) Don't Work as single and noconsole exe file (pyinstaller)带有 selenium(webdriver)的 Python 程序不能作为单个和 noconsole exe 文件(pyinstaller)工作
【发布时间】:2016-02-25 07:57:21
【问题描述】:

以下是我的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 吗?

【问题讨论】:

  • 你有没有试过在运行前在PATH环境变量中添加C:\\Program Files\\Internet Explorer
  • 是的,我的 PATH 如下,但仍然无法解决此问题:PATH=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C :\Windo ws\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Python34;"C:\Program Files\Internet Explorer"
  • 在您的上一条评论中,“pro”和“gram”之间有一个空格,这是您评论中的拼写错误吗?
  • 是的,这是我的错字,但在我的系统路径中是正确的,这无法解决问题。

标签: python selenium webdriver pyinstaller


【解决方案1】:

我想我通过修改 selenium 包中的 Service 类 解决了这个问题。我不确定这是否是硒(2.47.3)的错误。原始代码仅在调用subprocess.Popen 函数时重定向stdoutstderr 而不是stdin

我修改了以下代码:

self.process = subprocess.Popen(cmd,
                stdout=PIPE, stderr=PIPE)

收件人:

self.process = subprocess.Popen(cmd, stdin=PIPE,
                stdout=PIPE, stderr=PIPE)

那么问题就解决了。

【讨论】:

猜你喜欢
  • 2023-03-22
  • 2015-02-13
  • 1970-01-01
  • 2014-08-18
  • 2019-05-29
  • 2019-01-02
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
相关资源
最近更新 更多