我正在尝试通过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限制?
答案 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安装Firebug和ConsoleExport插件来解决这个问题,然后将其指向一些日志记录服务器。有关如何以编程方式从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'}