在Linux中运行无头firefox与selenium

时间:2015-08-12 05:26:11

标签: python linux firefox selenium

我正在尝试在Linux上运行无头的Firefox浏览器。我安装了firefox并在我的PATH上安装了xvfb,并使用pyvirtualdisplay来设置xvfb的显示。当最后一行被执行时

from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=False, size=(1024, 768))
display.start()
browser = webdriver.Firefox()

我收到错误消息:

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. 

我尝试将日志文件设置为:

p = webdriver.FirefoxProfile()
p.set_preference("webdriver.firefox.logfile", "/tmp/firefox_log")
browser = webdriver.Firefox(p)

但是没有创建日志文件(并且首先创建文件不会写入它)。如何找出有关出错的更多信息?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

from pyvirtualdisplay import Display
from selenium import webdriver



class Firefox:

    def __init__(self):

        self.display = Display(visible=0, size=(800, 600))
        self.display.start()
        self.driver = webdriver.Firefox()
        self.driver.set_window_size(1120, 450)
    def shutdown(self):
        self.display.stop()
        self.driver.quit()

答案 1 :(得分:0)

我认为python没有指向正确的二进制文件。在删除了我的发行版附带的二进制文件然后安装64位版本后,我在过去遇到了一些问题。是的,基于我的经验,Linux中的64位版本存在问题。通常会打开并挂起,无所事事。

如果这是您的问题,如果您的测试不是基于gecko驱动程序,请在45ff版本之前获得32位。对于ff45 +也获取gecko驱动程序并将二进制文件添加到路径(gecko驱动程序)。那么你应该这样使用Firefox Binary。

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary("/usr/bin/firefox") #Or whatever path you have(E.G. Portable)
driver = webdriver.Firefox(firefox_binary=binary)

在Windows上我使用便携式应用程序。在Linux上你必须使二进制文件可移植,有一个线程,在这里,在堆栈上,关于它。 Altough不是必要的

干杯