Python Selenium:Firefox配置文件错误

时间:2015-12-10 17:35:53

标签: python python-2.7 firefox selenium

我在selenium 2.48.0操作系统(无头设备)上使用RaspbianIceweasel/Firefox38.4的版本为selenium

我像这样导入from selenium import webdriver

browser = webdriver.Firefox()

然后我定义了驱动程序:

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.

当我运行此代码时,它会运行大约15秒并发出此错误:

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

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

我该怎么做才能摆脱这个错误?

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

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

我认为这部分是可以的,因为在添加这些行之前,Selenium给出了关于缺少显示的错误。使用此代码,Firefox至少可以启动,从而创建一些配置文件。

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

Chromium

EDIT2:我也尝试使用Firefox代替Selenium,但这不起作用,因为Raspbian的网络驱动程序无法与foreach ($response->return->row as $value) { if ($value->device === 'SEP111111111111') { echo 'True'; break; } } 一起使用。

2 个答案:

答案 0 :(得分:1)

最后,我使用false代替PhantomJS解决了我的问题。

没有Raspberry Pi的官方二进制文件,并且编译速度非常慢所以我使用了来自Selenium的二进制文件:https://github.com/piksel/phantomjs-raspberrypi/

答案 1 :(得分:0)

Selenium实际上启动了一个firefox实例

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

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

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

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