Python 3.x Selenium Python:没有这样的文件或目录:'/usr/local/bin/chromedriver';但它存在并被添加到路径中
尝试在Docker Apline Linux上运行selenium python时,出现“Message:'chromedriver'可执行文件需要在PATH中”错误,因为它认为该文件不存在。但我在其他答案中尝试了我能做的一切,但它仍然无法启动 以下是我迄今为止所做的尝试: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
- 将其添加到路径和PYTHONPATH的文件夹中李>
- 当我得到驱动程序时,尝试指定chromedriver的路径
- 当我获取驱动程序时,尝试指定chromium的路径
- 确保chromium浏览器以类似的标志启动
- chromedriver上的chmod+x
- chromedriver上的chmod 777
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脚本,并删除了错误的链接。修正了这个问题。等我有时间的时候,我再试试剩下的。