当前位置: 首页 > 知识库问答 >
问题:

无法在AWS计算机上从python中的selenium调用firefox

汝昀
2023-03-14

我正在尝试使用python中的selenium来使用javascript刮取一些动态页面。但是,在我遵循pypi页面上的selenium指令之后,我无法调用firefox(http://pypi.python.org/pypi/selenium).我在AWS ubuntu 12.04上安装了firefox。我收到的错误消息是:

In [1]: from selenium import webdriver

In [2]: br = webdriver.Firefox()
---------------------------------------------------------------------------
WebDriverException                        Traceback (most recent call last)
/home/ubuntu/<ipython-input-2-d6a5d754ea44> in <module>()
----> 1 br = webdriver.Firefox()

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.pyc in __init__(self, firefox_profile, firefox_binary, timeout)
     49         RemoteWebDriver.__init__(self,
     50             command_executor=ExtensionConnection("127.0.0.1", self.profile,
---> 51             self.binary, timeout),
     52             desired_capabilities=DesiredCapabilities.FIREFOX)
     53

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.pyc in __init__(self, host, firefox_profile, firefox_binary, timeout)
     45         self.profile.add_extension()
     46
---> 47         self.binary.launch_browser(self.profile)
     48         _URL = "http://%s:%d/hub" % (HOST, PORT)
     49         RemoteConnection.__init__(

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.pyc in launch_browser(self, profile)
     42
     43         self._start_from_profile_path(self.profile.path)
---> 44         self._wait_until_connectable()
     45
     46     def kill(self):

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.pyc in _wait_until_connectable(self)
     79                 raise WebDriverException("The browser appears to have exited "
     80                       "before we could connect. The output was: %s" %
---> 81                       self._get_firefox_output())
     82             if count == 30:
     83                 self.kill()

WebDriverException: Message: 'The browser appears to have exited before we could connect. The output was: Error: no display specified\n'

我在网上搜索了一下,发现这个问题发生在其他人身上(https://groups.google.com/forum/?fromgroups=#!topic/selenium用户/21sJrOJULZY)。但我不明白解决办法,如果是的话。

有人能帮我吗?谢谢

共有3个答案

翟元凯
2023-03-14

这已经在OP的问题的评论中了,但是要把它作为一个答案。您可以在后台运行Selenium,而无需打开实际的浏览器窗口。

例如,如果使用Chrome,请设置以下选项:

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.set_headless(headless=True)

然后,当您调用web驱动程序时,您的设置将成为一个参数:

browser = webdriver.Chrome(chrome_options=chrome_options)
孙熠彤
2023-03-14

我也面临同样的问题。我使用的是Firefox47和Selenium 2.53。所以我把Firefox降级到了45。这起作用了。

1) 首先删除Firefox 47:

sudo apt get purge firefox

2) 检查可用版本:

apt缓存显示firefox | grep版本

它将显示可用的火狐版本,如:

版本:47.0 build3-0ubuntu0。16.04.1

版本:45.0.2 build 1-0ubuntu1

3) 告诉要下载的版本

sudo apt-get安装Firefox=45.0.2 build 1-0ubuntu1

4) 接下来,您不必再次升级到较新的版本。

sudo apt-mark持有火狐

5) 如果以后要升级

sudo-apt-markunhold firefoxsudo-apt-get-upgrade

希望这能有所帮助。

湛同
2023-03-14

问题是Firefox需要显示器。在我的示例中,我使用了pyvirtualdisplay来模拟显示。解决办法是:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

driver= webdriver.Firefox()
driver.get("http://www.somewebsite.com/")

<---some code--->

#driver.close() # Close the current window.
driver.quit() # Quit the driver and close every associated window.
display.stop()

请注意,pyvirtualdisplay需要以下后端之一:Xvfb、xphyr、Xvnc。

这将解决您的问题。

 类似资料:
  • 问题内容: 我正在尝试使用python中的selenium来使用javascript抓取一些动态页面。但是,在pypi页面(http://pypi.python.org/pypi/selenium)上遵循selenium的说明后,我无法调用firefox。我在AWS ubuntu 12.04上安装了firefox。我收到的错误消息是: 我确实在网上搜索,发现其他人也遇到了这个问题(https://

  • 问题内容: 我正在尝试使用python中的硒来使用javascript抓取一些动态页面。但是,在pypi页面(http://pypi.python.org/pypi/selenium)上遵循硒的说明后,我无法调用firefox。我在AWS ubuntu 12.04上安装了firefox。我收到的错误消息是: 我确实在网上搜索,发现其他人也遇到了这个问题(https://groups.google.

  • 导入java.rmi.RemoteException;导入java.util.properties;导入javax.ejb.createException;导入javax.naming.context;导入javax.naming.InitialContext;导入javax.naming.namingException;导入com.brainysoftware.ejb.adder;导入com.b

  • 我在AWS中设置了一个新的MariaDB RDS实例,并向安全组添加了入站和出站规则,但当我试图通过mysql控制台连接到RDSendpoint时,总是会出现以下错误: 错误2003(HY000):无法连接到'db-xxxxxxx.eu-central-1.rds.amazonaws.com'上的MySQL服务器(10060“未知错误”) 我是AWS的新手。

  • 我有一个Lambda函数,用于部署无服务器框架的无头铬蟒蛇硒,在本地运行良好,但在lambda上崩溃。 一些基本的细节:(驱动程序信息:chromeDrive=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),平台=Linux4.14.231-180.360.amzn2。x86_64x86_64) Chromium版本:89xx硒==3.

  • 我的设置。我有三台PC:MyComp,Server1和Server2,两个类似的脚本使用调用命令RemTest1.ps1,它在远程Server1上调用RemTest2.ps1。RemTest2 使用 invoke-command 在 Server2 上运行脚本块。我使用的是Powershell版本5.1当我运行脚本从MyComp到Server1时,它工作正常。当我从Server1运行到Server