我正在IBM's CognitiveClass Labs的JupyterLab中使用Selenium,尽管该软件包很容易安装到pip
那里(实际上我认为它已经预装了),但找不到在PATH中需要的驱动程序:
from selenium import webdriver
browser = webdriver.Firefox()
[Out] FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'
[Out] WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
所有其他浏览器也都一样,只是用Chrome / IE替代品替换'geckodriver'。
无论如何,这在真正的python安装上可能很简单,但我更愿意在JupyterLab中使用它。我下载了驱动程序.exe文件,并将其放置在项目的目录中,实验室将其视为/resources/myproj
。然后,将其添加到JupyterLab已经使用的PATH中,并指定Selenium可执行文件的位置:
%env PATH=/home/jupyterlab/conda/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/resources/myproj
driver = os.path.normpath(os.path.join(os.getcwd(), 'geckodriver.exe'))
browser = webdriver.Firefox(executable_path=driver)
[Out] PermissionError: [Errno 13] Permission denied: '/resources/myproj/geckodriver.exe'
[Out] WebDriverException: Message: 'geckodriver.exe' executable may have wrong permissions.
我可以(或必须)在JupyterLab中修改这些文件的权限,以便Selenium访问它们吗?还是有另一种模仿Jupyter中的浏览器的方法?
编辑: Corey Goldberg是正确的,这是一个Linux环境,而不是Windows环境,我能够chmod linux驱动程序来解决该 specific 问题。但是硒仍在阻止我。
[Out] SessionNotCreatedException: Message: Unable to find a matching set of capabilities
我所遇到的问题(这与DebanjanB所引用的问题完全不同)是 JupyterLab特有的:
此问题可能特定于我的工作环境。我使用JupyterLab的终端将最新的Firefox安装到实验室的文件夹中
$ cd /tmp
$ wget 'http://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=en-US' -O firefox-67.0.4.tar.bz2
$ tar jxvf firefox-67.0.4.tar.bz2 -C /resources/myproj/
然后将木偶功能设置为False,创建了一个明确的Firefox二进制文件,以便我查看日志(最终它什么也没写,也不知道为什么)
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = False
driver = os.path.normpath(os.path.join(os.getcwd(), 'geckodriver'))
binary = os.path.normpath(os.path.join(os.getcwd(), 'firefox', 'firefox'))
ff_binary = webdriver.firefox.firefox_binary.FirefoxBinary(firefox_path=binary, log_file='ff_log.log')
browser = webdriver.Firefox(firefox_binary=ff_binary, capabilities=cap, executable_path=driver)
browser.get('http://google.com/')
最后,似乎我这边的某些事情阻止了它,并且超出了我最初提出的问题的范围。
[Out] WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.
答案 0 :(得分:1)
geckodriver.exe
是Windows的驱动程序。从PATH的外观来看,您需要Linux版本。取消存档后,可执行文件将命名为geckodriver
(无.exe)。然后,您需要运行chmod
为其赋予可执行权限,然后再使用。