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

Python 使用Selenium从Firefox获取console.log输出,python,firefox,logging,selenium,Python,Firefox,Logging,Selenium,我试图通过python Selenium API绑定从Firefox获取网页的控制台.log输出。基于,和一些,我尝试了以下方法: from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities d = DesiredCapabilities.FIREFOX d['loggingPrefs'] = { 'browser':'ALL' }

我试图通过python Selenium API绑定从Firefox获取网页的
控制台.log
输出。基于,和一些,我尝试了以下方法:

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返回的日志条目或
/tmp/firefox\u console
文件中看到
“foo”
。我做错什么了吗?或者这是硒的限制

对于
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\u console
文件中没有输出,我不知道,记录器似乎抛出了一些webdriver调试信息,但没有
console.log
输出

编辑:显然上述代码没有从
控制台.log返回数据。据我所知,这不是Selenium bug,而是Firefox的问题。我通过为Firebug安装插件,然后将其指向某个日志服务器,从而绕过了这个问题。有关如何从Selenium以编程方式启用Firebug的详细信息,请参见


有关更多详细信息,请参见本要点:

实施过程中发生了变化。我还使用了:

d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = {'browser': 'ALL'}
但现在我使用的是Python3.8、Selenium 3.4,它不再工作/实现了。 看到另一个讨论它的人了吗

否则会出现错误:
selenium.common.exceptions.WebDriverException:消息:loggingPrefs不是已知功能或扩展功能的名称

我不是说我没有从驱动程序获得日志输出,只是我没有获得
控制台.log
输出。您是否在驱动程序日志条目中看到
console.log
输出?似乎未修补的异常和语法错误被记录为严重异常。这看起来很有希望通过自动测试捕获JS错误。这是供现在来检查答案的人使用的。截至此日期,firefox的驱动程序.get_log(“浏览器”)不起作用。有一个未解决的问题,上面提到的问题已经解决,取而代之的是一个新的问题:-仍然没有解决。但是Firefox65+引入了“devtools.console.stdout.content”首选项,将console.log输出转储到stdout。