2015-12-10 2 views
2

Я использую Python 2.7.3, selenium 2.48.0 на Raspbian OS (безголовое устройство). Версия Iceweasel/Firefox: 38.4.Python Selenium: ошибка профиля Firefox

импортировать 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, но результат такой же.

Desipite ошибки, каждый раз, когда выполнение этой команды новый профиль получает создан для /tmp:

[email protected] ~/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 

Что я мог сделать, чтобы избавиться от этой ошибки?

EDIT: Я также создал виртуальный дисплей, чтобы запустить 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, но это не сработало, потому что их WebDriver для Selenium не работает с Raspbian.

ответ

1

В конце концов я решил свою проблему с помощью PhantomJS вместо Selenium.

Там не было официальным двоичная для Raspberry Pi и compling это было очень медленно, так что я использовал этот двоичный файл из Github: https://github.com/piksel/phantomjs-raspberrypi/

+0

"use PhantomJS" не является ответом –

0

Селен буквально запускает экземпляр светлячок

При запуске Firefox непосредственно из терминала, что происходит? Как вы сказали, это безголовый сервер, я думаю, он не запускается.

Чтобы получить работу с селеном, вы должны иметь возможность запускать firefox с терминала без ошибок. Затем, как только вы сможете это сделать, вы можете запустить его из селена.

В зависимости от вашего случая использования, питон-запросы могут быть лучшим выбором

Помните, что светлячок нужен DISPLAY для запуска

+1

Я установил и настроить виртуальный дисплей. Я добавил детали к исходному сообщению. –

Смежные вопросы