在 python 中调用 Firefox webdriver

Calling the Firefox webdriver in python

我正在使用 Debian 9 StretchPycharm IDE 并尝试学习网络抓取;我通过 运行ning:

安装了 Selenium
pip install selenium

以及 运行ning 的 Firefox 网络驱动程序:

wget https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz
tar -xvzf geckodriver-v0.19.1-linux64.tar.gz.1

chmod +x geckodriver

分别下载最后一个版本,解压并使驱动程序可执行。之后,我将驱动程序添加到以下路径:

usr/local/bin

我 运行 全部使用 Pycharm IDE 终端而不是内置的 Debian 终端。

为了打开 Firefox 和 web-scrape,我 运行:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")

最后一行给出错误信息作为输出:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/root/PycharmProjects/Example/venv/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 162, in __init__
    keep_alive=True)
  File "/root/PycharmProjects/Example/venv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/root/PycharmProjects/Example/venv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/root/PycharmProjects/Example/venv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/root/PycharmProjects/Example/venv/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: connection refused

我在 Python 和网络抓取方面都是新手;请有人解释一下安装和编码出了什么问题以及为什么会出现此错误?

希望能清楚地提出问题,在此先感谢大家的帮助。

假设geckodriver的位置是正确的,您可以查看以下内容:

  1. geckodriver 的属性应该具有正确的用户权限。您需要勾选方框 "Allow this file to run as a program" 或

  2. 如果您的访问权限受限,请将 geckodriver 保存在您的 home/username/geckodriver 中,然后将其指向您的 firefox。将其保存在您的主文件夹中将能够修改您的 geckodriver 的属性。

[编辑] 您的 运行 是在命令行中吗?如果是这样,你需要一个虚拟显示,我用过pyvirtualdisplay:

from pyvirtualdisplay import Display
display = Display(visible=0,size(800, 600))
display.start()
driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")

在使用 Selenium-Python Client v3.10.0 along with GeckoDriver v0.19.1Firefox v58.0.2 时,您必须初始化 WebDriver 实例并将其分配给变量,它将 in-turn 初始化 网络浏览器 ,它将 in-turn 打开所需的 URL,如下所示:

from selenium import webdriver

driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
driver.get('https://www.google.co.in')
print("Page Title is : %s" %driver.title)
driver.quit()

问题已通过删除 Mozilla Firefox 解决,在 Debian 9 中,Stretch 默认安装为 ESR(扩展版本支持);当时 Firefox ESR 版本是 52.0.

之后,我通过 运行ning 在终端上安装不稳定的 Firefox 版本(不是 Beta)来安装 super-user:

su -

gedit /etc/apt/sources.list

并将 deb http://ftp.it.debian.org/debian/ unstable main 添加到源列表文件。

之后,我运行:

apt-get update

apt-get install -t unstable firefox

更新软件并安装 Firefox。

按照问题中解释的指南安装和 运行 selenium Python 包,一切都应该可以正常工作(至少对我来说是这样!)。

希望这对其他用户也有帮助!