Python - Firefox 无头

Posted

技术标签:

【中文标题】Python - Firefox 无头【英文标题】:Python - Firefox Headless 【发布时间】:2012-04-21 01:42:15 【问题描述】:

在过去的几天里,我一直在使用 Selenium、Tor 和 Firefox 作为多个任务的组合。我已经设法用 Python 编写了一个简单的脚本,它通过 Selenium 控制 Firefox,而 Firefox 连接到 Tor 以保护隐私。

现在,我正在寻找一种节省资源的方法,所以我想到了在无头模式下运行 Firefox,我认为这是一个常见的功能,但似乎并非如此。我正在寻找一种方法来做到这一点。它是 Firefox 而不是基于终端的浏览器的原因是因为我在 Firefox 中使用的扩展名“TorButton”。它内置了有助于保护隐私的 javascript 注入。

如果以前有人做过(我相信很多人都做过!),我们将不胜感激一些提示,谢谢!

【问题讨论】:

【参考方案1】:

自 2017 年 9 月 28 日第 56 版发布以来,Firefox 无头模式可在所有三个主要操作系统中使用。

您可以通过webdriver.FirefoxOptions() 设置无头模式,就像使用 Chrome 一样:

from selenium import webdriver

options = webdriver.FirefoxOptions()
options.add_argument('headless')
driver = webdriver.Firefox(options=options)

附:如果您使用 Selenium webdriver.FirefoxOptions() 替换为 webdriver.firefox.options.Options()(参见 PR #5120)。

此外,使用环境变量MOZ_HEADLESS 会做同样的事情:

import os
from selenium import webdriver

os.environ['MOZ_HEADLESS'] = '1'  # <- this line
driver = webdriver.Firefox()

【讨论】:

【参考方案2】:

如果终于找到答案:

首先,首先做这些: 注意正确设置火狐驱动路径。

然后:

sudo apt-add-repository ppa:mozillateam/firefox-next sudo apt-get 更新 sudo apt-get install firefox xvfb Xvfb :10 -ac & 导出 DISPLAY=:10

最后运行这个命令,看看我们在执行 not 时是否有任何错误。

火狐

如果没有任何输出,只需单击 ctrl+c。 好的,然后写这段代码。

from selenium import webdriver

class FireFoxLoadTest:
    def __init__(self):
        # 1 - Load a fire fox web driver
        self.driver = webdriver.Firefox()

    def do_test(self, url):
        # 2 - Start to check url on the fire fox browser
        result = self.driver.get(url)
        self.driver.quit()
        return self.result

fire_fox = FireFoxLoadTest()
res = fire_fox.do_test('http://www.google.com')
print(res)

【讨论】:

【参考方案3】:

headless firefox 正在取得进展。

2017 年 4 月 21 日起,https://adriftwith.me/coding/2017/04/21/headless-slimerjs-with-firefox/

tl;dr Firefox Nightly 在 Linux 上支持无头运行 SlimerJS。 更多平台和完全无头的 Firefox 即将推出。

【讨论】:

【参考方案4】:

或者使用真正的无头浏览器,例如 Phantomjs,它重量轻且与 selenium 完美集成

from selenium import webdriver
driver=webdriver.PhantomJS('your pahtomjs exe file locaiton')

【讨论】:

问题的标题是:firefox【参考方案5】:

xvfb 是执行此操作的常用方法。搜索“selenium xvfb”应该会找到很多,例如:

Is it possible to run Selenium scripts without having an X server running, too? How do I run Selenium in Xvfb? http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

【讨论】:

啊,这太棒了!虽然有它的 Windows 版本或一些可以在 Windows 上运行的方法吗? @Dboy1612 看起来不像,这是一个很 unix'y 的东西,***.com/questions/944086/… @Dustin 自 2017 年 9 月 28 日版本 56 发布以来,Firefox 无头模式在所有三个主要操作系统中均可用。现在你可以很容易地用 selenium 做到这一点,请在下面查看我的答案。

以上是关于Python - Firefox 无头的主要内容,如果未能解决你的问题,请参考以下文章

Python/Firefox 无头抓取脚本中的“无法解码木偶的响应”消息

Selenium Firefox Python 在无头模式下运行超时初始化驱动程序

selenium.common.exceptions.InvalidSessionIdException通过Python在无头模式下使用GeckoDriver Selenium Firefox(示例代

Python-Selenium:剪贴板功能(ctrl + c)在 Firefox 无头模式下不起作用

无法在无头模式下运行 Firefox

如何在 Xvfb 上运行无头 Firefox