Получение вывода console.log из Firefox с помощью Selenium

Я пытаюсь получить вывод веб-страницы console.log из Firefox через привязки API Selenium для python. Основываясь на коде для Chrome, а некоторые советы по документации, я попробовал следующее:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities   
d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = { 'browser':'ALL' }
fp = webdriver.FirefoxProfile()
fp.set_preference('webdriver.log.file', '/tmp/firefox_console')
driver = webdriver.Firefox(capabilities=d,firefox_profile=fp)
driver.set_window_size(1280,1024)
driver.get('http://foo.com')
try:
    WebDriverWait(driver,10).until(lambda driver: driver.execute_script("return document.readyState") == "complete")
    for entry in driver.get_log('browser'):
        print entry
finally:
    driver.quit()

Но для простой страницы примера, вызывающей console.log("foo"), я не вижу "foo" либо в записи журнала, возвращаемые через API, либо в файл /tmp/firefox_console. Я делаю что-то неправильно? Или это ограничение Селена?

Ответ 1

Ваш код верен, когда дело доходит до функции get_log, просто добавьте оператор print в конец так:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

# enable browser logging
d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = {'browser': 'ALL'}
driver = webdriver.Firefox(capabilities=d)
# load some site
driver.get('http://foo.com')
# print messages
for entry in driver.get_log('browser'):
    print entry

print

driver.quit()

Фактически:

print len(driver.get_log('browser'))

возвращает 53 в моем примере с этим как примерную запись в списке:

{u'timestamp': 1407591650751, u'message': u"Expected ':' but found '}'.  Declaration dropped.", u'level': u'WARNING'}

Похоже на плохую проблему char. Что касается того, почему в файле /tmp/firefox_console нет вывода, у меня нет подсказки, логгер, кажется, бросает информацию об отладке webdriver, но не выводит console.log.

ИЗМЕНИТЬ: По-видимому, приведенный выше код не возвращает данные из console.log. Насколько мне известно, это не ошибка Selenium, а проблема с Firefox. Мне удалось обойти это, установив Firebug вместе с ConsoleExport плагин для Firebug, затем укажите его на какой-то сервер протоколирования. См. Также this SO answer для получения подробной информации о том, как включить Firebug программно из Selenium.

См. этот пояс для более подробной информации: https://gist.github.com/CGenie/fc63536a8467ae6ef945