我正在使用硒。脚本位于:
C:\Users\User\Desktop\Data Analytics Arg\Proyectos\datademia\Py_install\py_ejemplo.py . Venv is activated and chromedriver.exe is in C:\Users\User\Desktop\Data Analytics Arg\Proyectos\datademia\Py_install\chromedriver.exe
脚本运行完美。然后我通过终端创建了一个唯一的 .exe 文件:
pyinstaller --add-data "chromedriver.exe;." --windowed --onefile py_ejemplo.py
文件夹已正确创建(build 和 dist)。
.exe
文件 (py_ejemplo.exe
) 已创建,但是当我尝试运行它时,我收到以下消息:
但对我不起作用...有人可以帮助我吗?我不知道出了什么问题...
提前致谢
我遇到了同样的问题,但我正在使用 Firefox 和 geckodriver。
就我而言,我将 selenium 文件夹从虚拟环境复制到 dist 文件夹并且它起作用了。
使用 pyinstaller 构建和 selenium Web 驱动程序打包脚本时,您应该确保一些事情。
对于第 1 项和第 2 项,您可以分别使用 pyinstaller 的 --add-binary 和 --add-data 功能。在第一次运行 pyinstaller 之后,也可以在带有添加文件列表的 *.spec 文件中执行此操作(请参阅此说明) 我更喜欢如下命令行选项。
pyinstaller ./app.py --onefile --noconsole --add-binary "./driver/chromedriver.exe;./driver" --add-data "C:\Users\YOUR_USER_NAME\.conda\pkgs\selenium-3.141.0-py38h2bbff1b_1000\Lib\site-packages\selenium\webdriver\remote;selenium\webdriver\remote"
对于第3项,要解析源代码中的相对路径,您可以在相关位置使用以下函数(例如访问chromedriver.exe时)
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.dirname(__file__)
return os.path.join(base_path, relative_path)
当您需要访问源代码中打包的可执行文件和文件时,请使用上述函数。在下面的示例中,我的 chromedriver 位于工作区的驱动程序文件夹内。但是当通过 pyinstaller 可执行文件访问它时,它将被提取到 AppData 中的临时文件夹,但函数将通过 pyinstaller 设置的 sys._MEIPASS 变量访问它。
driver = webdriver.Chrome(executable_path = resource_path('./driver/chromedriver.exe'))
希望它有效。
这有效:
pyinstaller --onefile main.py --name f--add-data "requirements.txt;." --hidden-import=selenium_stealth --add-data "venv\Lib\site-packages\selenium_stealth\js\utils.js;." --collect-data=selenium_stealth --add-binary "chromedriver.exe;.