Selenium打包成exe运行出错

Selenium打包成exe运行出错

很久没写博文了,今天解决了一个其实也不是很复杂的问题,搜了好久的谷歌、百度,发现没怎么找到相关比较好的解决方法,或许是大家都能很轻松的解决这个问题吧,但我还是把我自己的解决方法分享下吧。

最近刚好需要写程序调用Selenium自动化跑一些东西,写好工具后准备打包,发现无限的出错,网上搜了好久也没找到确切答案,那么自己动手吧。

1.Firefox引擎找不到selenium\\webdriver\\firefox\\webdriver_prefs.json文件

如上图所示,提示的是找不到webdriver_prefs.json文件,于是我们进入selenium所安装目录下找到对应文件,放到打包完工具同目录下

(例:C:\Python27\Lib\site-packages\selenium\webdriver\firefox)

运行发现依然出现这个问题,于是我们根据提示打开firefox_profile.py,查看第65行代码

class FirefoxProfile(object):
    ANONYMOUS_PROFILE_NAME = "WEBDRIVER_ANONYMOUS_PROFILE"
    DEFAULT_PREFERENCES = None

    def __init__(self, profile_directory=None):
        """
        Initialises a new instance of a Firefox Profile

        :args:
         - profile_directory: Directory of profile that you want to use.
           This defaults to None and will create a new
           directory when object is created.
        """
        if not FirefoxProfile.DEFAULT_PREFERENCES:
            with open(os.path.join(os.path.dirname(__file__),
                                   WEBDRIVER_PREFERENCES)) as default_prefs:
                FirefoxProfile.DEFAULT_PREFERENCES = json.load(default_prefs)

我们发现问题所在

os.path.dirname(__file__)

该语句用于获取脚本自身路径,但在打包后就不能这么使用了,于是我们需要对代码进行修改,修改后代码放上

        if not FirefoxProfile.DEFAULT_PREFERENCES:
            if hasattr(sys, "frozen"):
                with open(os.path.join(os.path.dirname(os.path.abspath(unicode(sys.executable, sys.getfilesystemencoding()))),
                                   WEBDRIVER_PREFERENCES)) as default_prefs:
                    FirefoxProfile.DEFAULT_PREFERENCES = json.load(default_prefs)
            else:
                with open(os.path.join(os.path.dirname(__file__),
                                       WEBDRIVER_PREFERENCES)) as default_prefs:
                    FirefoxProfile.DEFAULT_PREFERENCES = json.load(default_prefs)

使用hasattr方法判断程序是否打包,如果打包就使用sys.executable方法获取自身路径

修改完成后我们重新打包,运行发现之前的问题不见了,出现了另一个问题:

2.Firefox引擎找不到selenium\\webdriver\\firefox\\webdriver.xpi文件

如上图所示发现缺少另一个文件webdriver.xpi,同样的拷贝后发现问题依旧,于是我们继续修改代码,查看第260行代码

    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:
            addon = os.path.join(os.path.dirname(__file__), WEBDRIVER_EXT)

同样是打包后路径问题,狠下心我们继续把代码改了

        if addon == WEBDRIVER_EXT:
            if hasattr(sys, "frozen"):
                addon = os.path.join(os.path.dirname(os.path.abspath(unicode(sys.executab     le, sys.getfilesystemencoding()))),
                                   WEBDRIVER_EXT)
            else:
                addon = os.path.join(os.path.dirname(__file__), WEBDRIVER_EXT)

最后再打包一次,现在已经能够正常运行了,跑起来吧,跑起来你会赢~

(注:个中代码并不是很难,有不懂的联系下代码上下文,自己理解下吧,或者直接在博文下留言吧,有空我会回复的)

时间: 2024-10-03 22:53:29

Selenium打包成exe运行出错的相关文章

解决python3使用cx_Freeze打包成exe后不能运行

我使用的是python3.4,在使用cx_Freeze打包成exe后发现有些打包后程序能够运行,但是有些无法运行 这是控制台报错 经过多方查找发现原来是windows缺少一些python的扩展包 如下图所示: 只要下载对应的扩展包安装上就能正确的打包成exe运行了. 扩展包下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 扩展包安装方式: pip install 安装包.whl

将java应用程序打包成独立运行的.exe方法

对于windows用户来说,将java应用程序打包成.exe最好不过了,现在我介绍两个方法. 1.用专业的应用程序打包工具InstallAnywhere,这个软件几乎能在所有平台上运行,当然你要下载到你需要的那个平台的啦!而且它也能打包成各个平台的安装程序(当然不是免费的).我下载的是7.1 企业版我只提供一些注册码,安装程序大家在网上找.InstallAnywhere7.1注册码使用方法参考:具体 2.用MINI的免费的工具javalunch,JavaLauncher的下载网址是:http:/

利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

原文:利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包 因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是64位也可能是32位,所以在打包的时候就需要打包成两份安装包.研究了几天终于有所收获,下边就是打包的步骤. 打包步骤: 一.前期准备 1.将asp.netmvc发布到本地目录中

python程序打包成.exe

1. 安装py2exe 2. 将打包文件与被打包文件放在同一个文件夹下. 例如,你需要将test.py打包成exe,那么test.py就是被打包文件,那么打包文件呢,写一个setup.py文件,内容如下: # setup.pyfrom distutils.core import setupimport py2exesetup(console=["test.py"]) 放在同一个目录的目的是因为在console = ["test.py"]时,不用考虑路径问题,注意,你

webService接口的py文件打包成exe

(一)webService接口的py文件打包成exe,在python3.5版本.pyInstaller3.2版本.pywin32-219.win-amd64-py3.5版本打包时报错,原因可能是pyinstaller.py文件使用python2语法写的代码. (二)webService接口的py文件打包成exe,在python2.7版本.pyInstaller2.0版本.pywin32-219.win32-py2.7版本打包成功,并成功运行. 打包步骤: 1.安装pywin32 2.解压缩pyI

使用py2exe将python程序打包成exe程序

近日帮朋友写了个python小程序,从互联网上抓取一些需要的文章到本地.为了运行方便,希望能转换成exe程序在windows下定期执行.从百度上找了些文章,发现py2exe的应用比较多,遂使用之. 1. 下载py2exe 官网:http://www.py2exe.org/index.cgi/FrontPage 我使用的是py2exe-0.6.9.win32-py2.7.exe 直接安装即可. 安装完成以后,python的Lib/site-packages目录下会多出py2exe目录和egg-in

Java桌面程序打包成exe可执行文件

前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: eclipse.exe4j(网上有软件和帐号下载) 第一步,将java项目打包成可执行jar文件,首先看一下我的java project结构,Main.java是程序入口类,里面有main函数,config目录是些配置文件,lib是用到的第三方类库 开始打包,Simulate(Java项目)-鼠标右键-E

JavaSE应用程序打包成可运行程序

JavaSE应用程序打包成可运行程序 所需软件 - MyEclipse或Eclipse(如会打包命令,此软件可省略) - exe4j 实现过程: 1.使用MyEclipse进行程序打包. - 选中项目右键 Export... 选中 JAR File...点击next 选择输出文件位置. 选择下一步取消勾选Export classs files with compile errors 选择下一步,选择包含main方法的类,之后点击finish就生成jar包了 2.生成windows下可运行的程序(

Python打包成exe

有个好网站http://www.lfd.uci.edu/~gohlke/pythonlibs/ , 这个网站可以下载许多非官方的python库的安装包. 1.首先去这个网站下载cx_freeze安装包后安装. 2.在C:\PythonXX\Scripts\ 下可以看到cxfreeze-quickstart.bat, XX为版本号 3.运行cxfreeze-quickstart.bat, 根据向导生成setup.py setup.py类似如下: importsys fromcx_Freeze im