FileNotFoundError:[Errno 2]没有这样的文件或目录selenium\webdriver\remote\getAttribute.js'

问题描述 投票:0回答:3

我正在使用硒。脚本位于:

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
) 已创建,但是当我尝试运行它时,我收到以下消息:

我一直在寻找但仍然无法解决...我已经尝试过这些解决方案:

找不到文件

但对我不起作用...有人可以帮助我吗?我不知道出了什么问题...

提前致谢

selenium-webdriver pyinstaller file-not-found getattribute
3个回答
0
投票

我遇到了同样的问题,但我正在使用 Firefox 和 geckodriver。

就我而言,我将 selenium 文件夹从虚拟环境复制到 dist 文件夹并且它起作用了。


0
投票

使用 pyinstaller 构建和 selenium Web 驱动程序打包脚本时,您应该确保一些事情。

  1. 构建时可能需要添加驱动程序可执行文件。 IE。 chromedriver.exe
  2. 构建时可能还需要添加一些与selenium相关的包文件,例如getattributes.js文件。我的项目需要它。
  3. pyinstaller 会将这些文件提取到 Windows 用户的 AppData 中的临时文件夹中。因此,在您的代码中,您的相对路径可能需要使用如下示例函数来解析(如果您在 vs code 中运行代码或通过 pyinstaller 可执行文件运行,则路径应通过函数解析)。

对于第 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'))

希望它有效。


0
投票

这有效:

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;.
© www.soinside.com 2019 - 2024. All rights reserved.