Python 3.x Selenium Python:没有这样的文件或目录:'/usr/local/bin/chromedriver';但它存在并被添加到路径中

Python 3.x Selenium Python:没有这样的文件或目录:'/usr/local/bin/chromedriver';但它存在并被添加到路径中,python-3.x,docker,selenium-webdriver,selenium-chromedriver,alpine,Python 3.x,Docker,Selenium Webdriver,Selenium Chromedriver,Alpine,尝试在Docker Apline Linux上运行selenium python时,出现“Message:'chromedriver'可执行文件需要在PATH中”错误,因为它认为该文件不存在。但我在其他答案中尝试了我能做的一切,但它仍然无法启动 以下是我迄今为止所做的尝试: 将其添加到路径和PYTHONPATH的文件夹中 当我得到驱动程序时,尝试指定chromedriver的路径 当我获取驱动程序时,尝试指定chromium的路径 确保chromium浏览器以类似的标志启动 chromedri

尝试在Docker Apline Linux上运行selenium python时,出现“Message:'chromedriver'可执行文件需要在PATH中”错误,因为它认为该文件不存在。但我在其他答案中尝试了我能做的一切,但它仍然无法启动

以下是我迄今为止所做的尝试:

  • 将其添加到路径和PYTHONPATH的文件夹中
  • 当我得到驱动程序时,尝试指定chromedriver的路径
  • 当我获取驱动程序时,尝试指定chromium的路径
  • 确保chromium浏览器以类似的标志启动
  • chromedriver上的chmod+x
  • chromedriver上的chmod 777
请参阅错误。

更新: 在Docker文件中添加这些包

RUN apk --update --no-cache add\
  alpine-sdk\
  autoconf\
  automake\
  bash\
  binutils-gold\
  build-base\
  curl\
  dumb-init\
  g++\
  gcc\
  gcompat\
  git\
  gnupg\
  gzip\
  jpeg\
  jpeg-dev\
  libc6-compat\
  libffi\
  libffi-dev\
  libpng\
  libpng-dev\
  libstdc++\
  libtool\
  linux-headers\
  make\
  mysql\
  mysql-client\
  mysql-dev\
  mesa-gles\
  nasm\
  nodejs\
  nss\
  openjdk8-jre\
  openssh-client\
  paxctl\
  python3\
  python3-dev\
  sudo\
  tar\
  unzip\
  wget\
  chromium
还有我正在使用的Chromedriver的shell脚本

#!/bin/bash

LATEST_CHROMEDRIVER=$(curl https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
curl -L https://chromedriver.storage.googleapis.com/$LATEST_CHROMEDRIVER/chromedriver_linux64.zip >> chromedriver.zip
mv -f chromedriver.zip /usr/local/bin/chromedriver.zip
unzip /usr/local/bin/chromedriver.zip -d /usr/local/bin
chmod a+x /usr/local/bin/chromedriver
sudo ln -s /usr/local/bin/chromedriver /usr/bin/chromedriver
rm /usr/local/bin/chromedriver.zip

ldd
的输出表明
chromedriver
是根据(GNU标准C库)构建的,该库与vanilla Alpine不兼容,使用

要解决此问题,请尝试安装Alpine存储库中提供的兼容Alpine版本的
chromedriver
,使用
apk add chromedriver


尝试从路径中删除/usr/local/bin/chromedriver。你想要的是目录,而不是文件。此外,即使文件中有777,我也会仔细检查您是否可以从Python中打开()该文件。path上的调用很好,现在设置为
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
,但并没有解决问题
fh=open(chromedriver\u path,“r”)
可以读取文件当您设置
chromedriver\u path
时,为什么要从当前工作目录开始
os.getcwd(),…
?我不确定它会返回什么,但我不知道为什么不能直接设置
chromedriver\u path=/usr/local/bin/chromedriver
我实际上是从这个开始的。有点试图把类似问题的每个答案都结合起来,这样就不会被标记为欺骗。但是我切换回来了,它没有修复它。既然您修复了路径,那么
哪个chromedriver
会返回正确的文件吗?如果启动webdriver.Chrome而不指定可执行路径,会发生什么?谢谢您的帮助。我实际上去了apk安装,这确实有效,但在我接受答案之前。我想知道是否有一种方法可以在alpine上安装正确的glibc软件包,并以此为基础进行构建。试着做些类似的事情。但还是会出错。有没有办法判断当前chromedriver是针对哪个glibc构建的?为了以防万一,我还添加了让chromedriver使用的shell脚本。我更愿意接受像apk add这样的东西更容易,但仍然能回答最初的问题。@愤世嫉俗的肯定-很高兴它奏效了。要安装glibc,请遵循此Dockerfile中的步骤,例如:。这是一个定制的glibc,由Sasha Gerrand()与musl链接。这些步骤基本上是下载glibc apk文件,安装它,并运行
ldconfig
更新动态链接器。要获得
chromedriver
所需的最低glibc版本,您需要转储对象符号并查找
glibc
字符串,类似于:
objdump-T chromedriver | grep GLIBC
。请参见此处:其他注释:1。从下载链接来看,zip似乎是Linux/mac,这主要意味着它与glibc(大多数Linuxes中使用的事实上的标准libc)相链接,而不是Alpine使用的musl libc。2.关于
libc6 compat
gcompat
:安装它们是不行的(至少对于chromedriver这样的复杂应用程序是不行的),因为它们是musl之上的某种“适配器”,只提供glibc接口,而不是实际的glibc及其问题和怪癖。Aw,很抱歉,为了简单起见,我编辑了bash脚本,并删除了错误的链接。修正了这个问题。等我有时间的时候,我再试试剩下的。