使用Selenium从Firefox获取console.log输出

时间:2014-04-22 23:09:52

标签: python firefox logging selenium

我正在尝试通过python Selenium API绑定从Firefox获取网页的console.log输出。基于code for Chrome和一些advice from the documentation,我尝试了以下内容:

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")的简单示例页面,我也不会在通过API或"foo"文件返回的日志条目中看到/tmp/firefox_console。难道我做错了什么?或者这是Selenium限制?

2 个答案:

答案 0 :(得分:6)

对于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'}

似乎是一个糟糕的问题。至于为什么/tmp/firefox_console文件中没有输出,我不知道,记录器似乎抛出一些webdriver调试信息,但没有console.log输出。

编辑:显然上述代码不会返回console.log的数据。据我所知,这不是一个Selenium bug,而是Firefox的一个问题。我设法通过为Firebug安装FirebugConsoleExport插件来解决这个问题,然后将其指向一些日志记录服务器。有关如何以编程方式从Selenium启用Firebug的详细信息,另请参阅this SO answer

有关详细信息,请参阅此要点:https://gist.github.com/CGenie/fc63536a8467ae6ef945

答案 1 :(得分:0)

实现方式有所变化。我也在使用:

toDouble()

但是现在我正在使用Python3.8,Selenium 3.4,并且不再起作用/实现了。 参见另一个Stackoverflow question进行讨论。

否则,您会得到以下错误: d = DesiredCapabilities.FIREFOX d['loggingPrefs'] = {'browser': 'ALL'}