【问题标题】:Use selenium with chromedriver and pyinstaller on Mac在 Mac 上使用 selenium 和 chromedriver 和 pyinstaller
【发布时间】:2019-11-08 00:32:04
【问题描述】:

我创建了应用程序来像下面的代码一样打开浏览器,它在 cmd 行中运行良好。
但是,当我用pyinstaller打包时,它不起作用..

有什么问题? 感谢您对这种情况的帮助。

# main.py
# -*- coding: utf-8 -*-
import os

from selenium import webdriver

if __name__ == '__main__':
    PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
    DRIVER_BIN = os.path.join(PROJECT_ROOT, "chromedriver")

    browser = webdriver.Chrome(executable_path=DRIVER_BIN)
    browser.get('https://google.com/')

这是 .spec 文件。

# -*- mode: python -*-
import os

project_path = os.path.abspath(os.path.curdir)

block_cipher = None

a = Analysis(['main.py'],
             pathex=[project_path],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='test',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False)

app = BUNDLE(exe,
         name='test.app',
         icon=None,
         bundle_identifier=None)

文件树就是这样的。

dist/  
      test.app  
      test  
      chromedriver <- add after packaged

错误可能是这个。

Jun 26 14:42:01 MacBookPro ctkahp[67399]: objc[67399]: Class TKTokenRefCtkd is implemented in both /System/Library/Frameworks/Security.framework/Versions/A/Sec    urity (0x7fff8a3cf0a0) and /System/Library/Frameworks/CryptoTokenKit.framework/ctkahp.bundle/Contents/MacOS/ctkahp (0x10ecbc760). One of the two will be used.     Which one is undefined.
Jun 26 14:42:16 MacBookPro com.apple.xpc.launchd[1] (highlow.23356[67408]): Service exited with abnormal code: 255

【问题讨论】:

  • 有错误吗?
  • @orde 也许,这些? Jun 26 14:42:01 MacBookPro ctkahp[67399]: objc[67399]: Class TKTokenRefCtkd 在 /System/Library/Frameworks/Security.framework/Versions/A/Security (0x7fff8a3cf0a0) 和 /System/Library/ 中都实现了框架/CryptoTokenKit.framework/ctkahp.bundle/Contents/MacOS/ctkahp (0x10ecbc760)。将使用两者之一。哪一个是未定义的。 752 Jun 26 14:42:16 MacBookPro com.apple.xpc.launchd[1] (highlow.23356[67408]): Service exited with exception code: 255

标签: python selenium selenium-chromedriver pyinstaller


【解决方案1】:

命令执行的测试脚本路径与“bundle”不同。

你可以试试这个
main.py

import os
import sys

if __name__ == "__main__":
  if getattr(sys, 'frozen', False): 
    chromedriver_path = os.path.join(sys._MEIPASS, "chromedriver")
    driver = webdriver.Chrome(chromedriver_path)
  else:
    driver = webdriver.Chrome()

main.spec

project_path = os.path.abspath(os.path.curdir)
a = Analysis(['main.py'],
             pathex=[project_path],
             binaries=[('/Users/xxx/xxx/chromedriver', './')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

(参考:https://github.com/pyinstaller/pyinstaller/issues/1726
(参考:Running pyinstaller another pc with Chromedriver

【讨论】:

    【解决方案2】:

    我找到了解决方案。
    我试图将完整路径设置为可执行文件路径。然后它工作正常。

    但我不明白为什么这是个问题。

    PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
    DRIVER_BIN = os.path.join(PROJECT_ROOT, "chromedriver")
    
    browser = webdriver.Chrome(executable_path=DRIVER_BIN)
    

    还有这个。

    browser = webdriver.Chrome(executable_path="./chromedriver")
    

    .app 文件在哪里看?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2020-08-16
      • 2021-05-04
      • 2015-02-16
      • 2017-12-05
      相关资源
      最近更新 更多