使用chromedriver和Selenium创建Python可执行文件

9
我创建了一个使用Selenium和chromedriver的小型网络爬虫应用程序,它可以将内容输出到Excel文件中。我为这个应用程序做的人不幸地不是最懂技术的人。

那么我的问题是,我该如何与这些人分享这个应用程序?

我查看了py2exe.org,但在创建可执行文件时没有考虑chromedriver。有什么更好的方法可以做到这一点,而不需要这些人手动将文件添加到他们的“usr/bin”中吗?


你正在使用 macOS 吗? - Ratmir Asanov
1个回答

9
您可以使用pyinstaller来完成这个操作:以下是适用于Windows的解决方案,但是pyinstaller称它也能在Mac OS上工作。
步骤如下:
  1. 打开命令提示符
  2. 在cmd中进入脚本所在的项目路径
  3. 输入pyinstaller Scriptname.spec Scriptname.py(如果屏幕上显示提示,请输入y/yes)
  4. 生成文件位于'项目路径'\dist\Scriptname
请注意,在传递参数时,您需要在Scriptname.spec中提供chromedriver的详细信息。
spec文件的示例内容:
# -*- mode: python -*-

block_cipher = None


a = Analysis(['Scriptname.py'],
             pathex=['Pathofproject'],
             binaries=[('C:\\Python27\\chromedriver.exe', '**.\\selenium\\webdriver**')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='createEVIPOrg_Automation_new',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='**scriptname**')

您需要更新脚本名称、脚本所在的项目路径和规范文件中的chromedriver路径。


1
谢谢!我正在尝试使用--onefile命令,但它似乎没有考虑到二进制文件。我只收到错误信息“FileNotFoundError:[Errno 2] No such file or directory: 'chromedriver':'chromedriver'”。有什么解决方法吗? - user2868900
你需要在规范文件的二进制文件夹下提供你机器上chromedriver的路径。 - thebadguy
1
我目前有以下内容:binaries=[('/usr/local/bin/chromedriver', '.')], 然后在.py脚本中有以下行:cdriver_path = os.path.join(sys._MEIPASS, "chromedriver") driver = webdriver.Chrome(cdriver_path) - 我仍然遇到相同的错误,似乎当它是--onefile时,我无法指向输出文件夹? - user2868900
2
解决了!最终路径可用,关键在于使用“pyinstaller --onefile scriptname.spec”(不包括scriptname.py)执行文件。然后它可以很好地打包一切。 - user2868900
1
你能帮忙解决一下Firefox浏览器的问题吗?我设置了binaries=[("C:\\python36\\geckodriver.exe", '.')],,但是出现了 ** No module named 'selenium'** 错误提示。 - Heinz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接