用Selenium从Firefox获取console.log输出
我想通过 Python 的 Selenium 库从 Firefox 浏览器获取网页的 console.log
输出。根据 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")
,我也没有在通过 API 返回的日志条目中看到 "foo"
,也没有在 /tmp/firefox_console
文件中找到。请问我是不是做错了什么?还是说这是 Selenium 的一个限制?
2 个回答
实现方式发生了一些变化。我之前也在使用:
d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = {'browser': 'ALL'}
但现在我使用的是Python3.8和Selenium 3.4,这个方法不再有效了。可以查看另一个StackOverflow上的问题,讨论了这个情况。
否则你会遇到这个错误:
selenium.common.exceptions.WebDriverException: Message: loggingPrefs 不是一个已知的能力或扩展能力的名称
你的代码在 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的错误,而是Firefox的问题。我通过安装 Firebug 和 ConsoleExport 插件来解决这个问题,然后把它指向某个日志服务器。有关如何通过Selenium程序化启用Firebug的详细信息,请参见 这个SO回答。
更多细节请查看这个链接: https://gist.github.com/CGenie/fc63536a8467ae6ef945