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

msr*_*har 14 python firefox logging selenium

我试图console.log通过python Selenium API绑定从Firefox 获取网页的输出.根据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()
Run Code Online (Sandbox Code Playgroud)

但是,即使是一个简单的调用示例页面console.log("foo"),我也看不到"foo"通过API或/tmp/firefox_console文件返回的日志条目.难道我做错了什么?或者这是Selenium限制?

see*_*eeg 5

你的代码在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()
Run Code Online (Sandbox Code Playgroud)

事实上:

print len(driver.get_log('browser'))
Run Code Online (Sandbox Code Playgroud)

53在我的示例中以此作为列表中的示例条目返回:

{u'timestamp': 1407591650751, u'message': u"Expected ':' but found '}'.  Declaration dropped.", u'level': u'WARNING'}
Run Code Online (Sandbox Code Playgroud)

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

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

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