【问题标题】:Python Selenium: Firefox profile errorPython Selenium:Firefox 配置文件错误
【发布时间】:2016-03-16 11:11:17
【问题描述】:

我在Raspbian OS(无头设备)上使用Python 2.7.3selenium 2.48.0Iceweasel/Firefox 的版本是38.4

我像这样导入selenium

from selenium import webdriver

然后我定义驱动:

browser = webdriver.Firefox()

当我运行这段代码时,它运行了大约 15 秒并给出了这个错误:

Traceback (most recent call last):
  File "Dbfull3.py", line 114, in <module>
    data=getdata()
  File "Dbfull3.py", line 17, in getdata
    browser = webdriver.Firefox()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 77, in __init__
    self.binary, timeout),
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 49, in __init__
    self.binary.launch_browser(self.profile)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 68, in launch_browser
    self._wait_until_connectable()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 103, in _wait_until_connectable
    raise WebDriverException("Can't load the profile. Profile "
selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Profile Dir: %s If you specified a log_file in the FirefoxBinary constructor, check it for details.

在研究这个错误时,我从StackOverflow 和其他地方发现了类似的情况,但许多来自Windows 环境或错误来自不同的包。一种建议的解决方案是使用不同版本的Firefox/Iceweasel,但我找不到适用于我的OS 的其他版本。

我也尝试以root 执行我的代码,但结果相同。

尽管出现错误,但每次执行此命令时,新配置文件都会创建到 /tmp

user@host ~/bin $ ls -l /tmp/tmpiV4R0H/
total 11952
drwxr-xr-x 2 user user     4096 Dec 10 18:42 amd64
-rw-r--r-- 1 user user   183494 Dec 10 18:42 blocklist.xml
drwx------ 2 user user     4096 Dec 10 18:43 bookmarkbackups
drwx------ 4 user user     4096 Dec 10 18:42 cache2
-rw------- 1 user user    65536 Dec 10 18:43 cert8.db
-rw------- 1 user user      188 Dec 10 18:42 compatibility.ini
-rw-r--r-- 1 user user   229376 Dec 10 18:42 content-prefs.sqlite
-rw-r--r-- 1 user user   524288 Dec 10 18:43 cookies.sqlite
-rw------- 1 user user     4182 Dec 10 18:43 directoryLinks.json
drwxr-xr-x 3 user user     4096 Dec 10 18:42 extensions
-rw-r--r-- 1 user user      259 Dec 10 18:42 extensions.ini
-rw------- 1 user user     2154 Dec 10 18:43 extensions.json
drwx------ 2 user user     4096 Dec 10 18:42 gmp
-rw------- 1 user user    16384 Dec 10 18:42 key3.db
lrwxrwxrwx 1 user user       16 Dec 10 18:42 lock -> 127.0.1.1:+29581
-rw-r--r-- 1 user user     3319 Dec 10 18:43 mimeTypes.rdf
-rw-r--r-- 1 user user    65536 Dec 10 18:42 permissions.sqlite
-rw-r--r-- 1 user user 10485760 Dec 10 18:43 places.sqlite
-rw-r--r-- 1 user user    32768 Dec 10 18:42 places.sqlite-shm
-rw-r--r-- 1 user user   557496 Dec 10 18:43 places.sqlite-wal
-rw------- 1 user user     5020 Dec 10 18:43 prefs.js
-rw------- 1 user user    16384 Dec 10 18:42 secmod.db
-rw------- 1 user user       53 Dec 10 18:43 sessionCheckpoints.json
drwxr-xr-x 2 user user     4096 Dec 10 18:42 startupCache
drwx------ 2 user user     4096 Dec 10 18:43 userumbnails
-rw-r--r-- 1 user user     3504 Dec 10 18:42 user.js
drwxr-xr-x 2 user user     4096 Dec 10 18:42 webapps
drwxr-xr-x 2 user user     4096 Dec 10 18:42 x86

我能做些什么来摆脱这个错误?

编辑:我还设置了一个虚拟显示器以允许 Firefox 启动。此代码在浏览器之前执行。

from pyvirtualdisplay import Display
display = Display(visible=0, size=(640, 480))
display.start()

我认为这部分没问题,因为在添加这些行之前,Selenium 给出了关于缺少显示的错误。有了这段代码,Firefox 至少可以启动,它会创建一些配置文件。

当我这样做时 Firefox 也会启动:

Xvfb :99
export DISPLAY=:99
firefox
(Firefox just sits there, but does not give errors.)

EDIT2:我也尝试使用Chromium 代替Firefox,但这不起作用,因为他们的Selenium 网络驱动程序不适用于Raspbian

【问题讨论】:

    标签: python python-2.7 firefox selenium


    【解决方案1】:

    最后我用PhantomJS代替Selenium解决了我的问题。

    树莓派没有官方二进制文件,编译速度很慢,所以我使用了来自Github的这个二进制文件:https://github.com/piksel/phantomjs-raspberrypi/

    【讨论】:

    • “使用 PhantomJS”不是答案
    【解决方案2】:

    Selenium 确实启动了一个 firefox 实例

    当您直接从终端启动 firefox 时会发生什么?正如你所说,这是一个无头服务器,我想它不会启动。

    要让 selenium 正常工作,您需要能够从终端运行 firefox,而不会出现错误。然后,一旦你能做到这一点,你就可以从 selenium 启动它。

    根据您的用例,python-requests 可能是更好的选择

    记住,firefox 需要一个 DISPLAY 才能运行

    【讨论】:

    • 我已经安装并设置了一个虚拟显示器。我在原始消息中添加了详细信息。
    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2013-08-06
    • 1970-01-01
    • 2018-11-19
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多