如何在Jupyter Lab中为Selenium提供浏览器驱动程序?

时间:2019-07-01 12:13:41

标签: python selenium jupyter-lab

我正在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特有的

  • 是否依赖于本地Windows计算机的Firefox安装?它具有较旧的版本(52.5.2),因此除了最新版本外,我还尝试了相应版本的gecko驱动程序(17.0)。但我对此表示怀疑,因为我没有将其指向本地驱动器上的Firefox可执行文件。
  • 我需要32位或64位Linux驱动程序吗?无论如何我都尝试过,都返回上面的相同错误。但是我仍然不知道,因为据我了解,我的代码运行在IBM的计算机上,而不是我的计算机上。

Edit2:分辨率

此问题可能特定于我的工作环境。我使用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.

1 个答案:

答案 0 :(得分:1)

geckodriver.exe是Windows的驱动程序。从PATH的外观来看,您需要Linux版本。取消存档后,可执行文件将命名为geckodriver(无.exe)。然后,您需要运行chmod为其赋予可执行权限,然后再使用。